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

Trying to convert the tick value of Y-Axis Scale in SAS

我正在尝试将 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.4\tpl.tpl';
QUIT;

DATA _null_;
INFILE 'C:\Users\Username\Documents\My SAS Files.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

谢谢你,乔

我是 运行 SAS zt 模式。改成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 是否真的在做任何事情(before/after 那一行,PUT the infile value IF "tickvaluelist" is found)。

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

下面是适合我的图片。