对数据进行子分组并在循环内使用宏来绘制直方图
Sub grouping the data and using macro inside a loop to draw a histogram
我正在使用 sas 9.4
我有一个 10000x7 的数据集,看起来像这样
survtime cont Trial SurvI Treat PatID Sim
1 2.271536 2.6398586 1 1 0 1 1
2 2.920410 -0.1787789 1 1 0 2 1
3 1.328392 -2.1513527 1 1 0 3 1
4 11.433881 2.2132001 1 1 0 4 1
5 20.264126 0.9029487 1 0 1 5 1
6 19.827590 0.3236216 1 0 1 6 1
最后一列是 'Sim' 取值 1 到 10,每 1000 次更改一次,
像 1 到 1000 sim=1
1001 到 2000 模拟=2
.
.
9001 到 10000 模拟=10
然后我有一个宏
%NORMSURV(data=prostate,true=survtime,trueind=survind,surrog=psa,treat=treat,center=trial,patientid=patid,copula=houggard,adjustment=weighted,imagefmt=eps);
我想 运行 这个宏为每个 sim 值得到两个值 TAU 和 R2
我想澄清一点假设没有 'sim',只有 1000x6 我可以获得这些值
proc print data=sur_measure_clay ;
VAR TAU R2;
run;
使用 运行 那个代码。
现在我有 10 个,我可以手工完成,但我将有 100 个来绘制直方图
我想 运行 保留这 2 个值以获得直方图。
'data=sur_measure_clay' 是来自宏的默认名称。
谢谢
在我看来,完成此任务的正确方法是修改宏以在整个数据集中绘制直方图。
假设宏 %NORMSURV 像您描述的那样工作,可以按如下方式完成:
/* there is no need to use proc sql
if you know how much of iteration do you have */
proc sql noprint;
select distinct max(sim)
into : max_iter
from prostate;
quit;
%put Maximum value of Sim Variable : &max_iter;
然后你可以把你的宏放在另一个循环里
%macro sim_iterate;
%do iter = 1 %to &max_iter;
data tmp;
set prostate;
where sim = &max_iter;
run;
/* Run your instructions */
%end;
%mend;
%sim_iterate;
我正在使用 sas 9.4
我有一个 10000x7 的数据集,看起来像这样
survtime cont Trial SurvI Treat PatID Sim
1 2.271536 2.6398586 1 1 0 1 1
2 2.920410 -0.1787789 1 1 0 2 1
3 1.328392 -2.1513527 1 1 0 3 1
4 11.433881 2.2132001 1 1 0 4 1
5 20.264126 0.9029487 1 0 1 5 1
6 19.827590 0.3236216 1 0 1 6 1
最后一列是 'Sim' 取值 1 到 10,每 1000 次更改一次, 像 1 到 1000 sim=1 1001 到 2000 模拟=2 . . 9001 到 10000 模拟=10
然后我有一个宏
%NORMSURV(data=prostate,true=survtime,trueind=survind,surrog=psa,treat=treat,center=trial,patientid=patid,copula=houggard,adjustment=weighted,imagefmt=eps);
我想 运行 这个宏为每个 sim 值得到两个值 TAU 和 R2
我想澄清一点假设没有 'sim',只有 1000x6 我可以获得这些值
proc print data=sur_measure_clay ;
VAR TAU R2;
run;
使用 运行 那个代码。
现在我有 10 个,我可以手工完成,但我将有 100 个来绘制直方图 我想 运行 保留这 2 个值以获得直方图。 'data=sur_measure_clay' 是来自宏的默认名称。 谢谢
在我看来,完成此任务的正确方法是修改宏以在整个数据集中绘制直方图。 假设宏 %NORMSURV 像您描述的那样工作,可以按如下方式完成:
/* there is no need to use proc sql
if you know how much of iteration do you have */
proc sql noprint;
select distinct max(sim)
into : max_iter
from prostate;
quit;
%put Maximum value of Sim Variable : &max_iter;
然后你可以把你的宏放在另一个循环里
%macro sim_iterate;
%do iter = 1 %to &max_iter;
data tmp;
set prostate;
where sim = &max_iter;
run;
/* Run your instructions */
%end;
%mend;
%sim_iterate;