问题描述
我试图将 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 将其作为文件来源,然后手动编辑它,然后将其作为代码的一部分运行。不这样做的唯一原因是,如果您想根据数据中的内容以编程方式更改刻度值列表,但即便如此,您也可以做不同的事情 - 就像使用宏变量一样。
以下是对我有用的内容和图片。