SAS代码,排序两次?

时间:2015-12-28 10:25:02

标签: sas

proc lifetest data=hodgkins outsurv=KM_data /*noprint*/;
   time maltime*mcens(0);
   strata age_gt30; 
run;    

proc sort data=KM_data; 
   by age_gt30; 
run;

data KM_data; 
   set KM_data; 
   by age_gt30; 
/* My question: Why age_gt30 are being sorted twice?*/
   Failure = 1‐Survival; 
   output; run;

非常感谢,DomPazz和Peter Flom!我很惊讶创建新变量(名称Failure)需要“BY语句”来完成。 我会更好地理解,如果你说,不是1)和2)相同与否? /P.S。 age_gt30 = 0或1 /

1)proc lifetest data = hodgkins outsurv = KM_data; 时间错误* mcens(0); strata age_gt30;运行;

proc sort data = KM_data;按age_gt30;运行;

数据KM_data;设置KM_data;按age_gt30;失败= 1 - 生存;输出;运行;

2)proc lifetest data = hodgkins outsurv = KM_data; 时间错误* mcens(0); strata age_gt30;运行;

数据KM_data;设置KM_data;失败= 1 - 生存;输出;运行;

2 个答案:

答案 0 :(得分:3)

数据集只被排序一次。

proc sort data=KM_data; 
   by age_gt30; 
run;

最后的数据步骤是计算名为Failure的变量。有一个BY语句需要进行排序。我认为你的困惑是BY陈述。它告诉数据步骤创建临时变量(不放到输出数据集),以帮助您找到具有相同BY组值的所有值的开始和结束。

但是,在该数据步骤的代码中,不需要BY语句。在小组内没有做任何事情。

这个简化的代码与数据步骤的功能相同。

data KM_data; 
   set KM_data; 
   Failure = 1‐Survival; 
run;

答案 1 :(得分:1)

它没有被排序两次,它被排序一次(在PROC SORT上)但是SAS要求对数据进行排序以便运行BY语句。