for-loop - 对数据进行分组并在循环内使用宏来绘制直方图
问题描述
我正在使用 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 sim=2 。. 9001 到 10000 sim=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;
推荐阅读
- wpf - 如何在整个 WPF 渲染周期中显示等待光标?
- typescript - 您如何为包含多个模块/类的“复杂”香草 JavaScript 库编写工作 .d.ts 文件?
- excel - 在一个范围(多列或多行中的任何一个)中查找一个值并返回该行最左边的列中的值
- python - 使用 http 请求切换帧(在砷中)
- node.js - ses.sendCustomVerificationEmail 不是使用 AWS JavaScript SDK v2 的函数
- python - 神经网络损失突然下降
- django - 发送删除请求时未设置 CSRF-cookie
- java - 预建的 java 类会更新吗?
- android - 加载嵌套的viewpagers没有延迟 - android
- canvas - Flutter web:如何在使用 dart:html 时从 CanvasRenderingContext2D 访问 getTransform 本机方法?