尝试在 SAS 中转换 Y 轴刻度的刻度值

问题描述

我试图将 Y 轴刻度的刻度值从 (0 .2 .4 .6 .8 1.0) 转换为 (0 .01 .02 .03 .04 .05),但失败了。但是,转换viewmax时没有这个问题

PROC TEMPLATE;
DELETE Stat.Lifetest.Graphics.ProductLimitFailure2;
SOURCE Stat.Lifetest.Graphics.ProductLimitFailure2 / FILE='C:\Users\Username\Documents\My SAS Files\9.4\tpl.tpl';
QUIT;

DATA _null_;
INFILE 'C:\Users\Username\Documents\My SAS Files\9.4\tpl.tpl' END=eof;
INPUT;
IF _n_ eq 1 THEN CALL execute('PROC TEMPLATE;'); 
   _infile_ = tranwrd(_infile_,'viewmax=1','viewmax=0.05');     /* tranwrd(var,from,to);*/
   _infile_ = tranwrd(_infile_,'tickvaluelist=(0 .2 .4 .6 .8 1.0)','tickvaluelist=(0 .01 .02 .03 .04 .05)');
   CALL execute(_infile_);
IF eof THEN CALL execute('quit;');
RUN;

PROC LIFETEST DATA=for_analysis_1 PLOT=SURVIVAL (FAILURE TEST ATRISK(OUTSIDE(0.10) MAXLEN=26) NOCENSOR) NOTABLE;
TIME Days * Status(0);
STRATA group;

RUN;

**此代码改编自:https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.4/statug/statug_kaplan_sect012.htm

谢谢你,乔

我在 zt 模式下运行 SAS。更改为 EN 模式后,它成功运行。此外,打开 .tpl 文件并手动编辑它也是一种简单的方法!非常感谢。

**更改认的 SAS® 会话编码: https://support.sas.com/kb/51/586.html

解决方法

它对我来说很好。

PROC TEMPLATE;
DELETE Stat.Lifetest.Graphics.ProductLimitFailure2;
SOURCE Stat.Lifetest.Graphics.ProductLimitFailure2 / FILE='....dir....\tpl.tpl';
QUIT;

DATA _null_;
INFILE '....dir....\tpl.tpl' END=eof;
INPUT;
IF _n_ eq 1 THEN CALL execute('PROC TEMPLATE;'); 
   _infile_ = tranwrd(_infile_,'viewmax=1','viewmax=0.05');     /* tranwrd(var,from,to);*/
   _infile_ = tranwrd(_infile_,'tickvaluelist=(0 .2 .4 .6 .8 1.0)','tickvaluelist=(0 .01 .02 .03 .04 .05)');
   CALL execute(_infile_);
IF eof THEN CALL execute('quit;');
RUN;

proc lifetest data=sashelp.BMT
   plots=survival(cb=hw failure test atrisk(outside maxlen=13));
   time T * Status(0);
   strata Group;
run;

你可以做的测试是,首先,运行这个确切的代码(使用内置数据集);如果可行,那么您就知道这是您的数据的问题。其次,我想知道您是否可能对字符编码有一些问题(我在 EN-US 模式下运行,您使用的是 UTF-8 吗?空格是真正的空格,还是“A0”x 网络空格?)。 TRANWRD 是这里使用的“锤子”。也许可以考虑使用不同的方式来更改更易于调试的值。至少,通过一些 PUT 语句逐步检查 TRANWRD 是否真的在执行任何操作(在该行之前/之后,PUT infile 值如果找到“tickvaluelist”)。

还要考虑刻度值列表可能跨行分隔。打开 .tpl 文件,看看你有什么!没有什么说你需要这样做 - 你可以直接编写 PROC TEMPLATE 代码。我可能会做的是运行第一个 PROC TEMPLATE 将其作为文件来源,然后手动编辑它,然后将其作为代码的一部分运行。不这样做的唯一原因是,如果您想根据数据中的内容以编程方式更改刻度值列表,但即便如此,您也可以做不同的事情 - 就像使用宏变量一样。

以下是对我有用的内容和图片。

PROC LIFETEST output with 0.00-0.05 Y axis

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...