SAS 按自定义顺序对观测进行排序
本文链接:https://www.cnblogs.com/snoopy1866/p/15091967.html
实际项目中会经常遇到按指定顺序输出Listing的情况,例如:输出所有受试者的分组情况列表。
首先准备数据集:
data data1;
input name $ arm $;
cards;
AXLD 试验组
GCHS 对照组
IJNK 对照组
OKLS 试验组
NJDK 试验组
PLDF 对照组
TGSJ 试验组
IDNG 对照组
;
run;
然后使用proc format过程创建一个自定义输出格式,这里创建了一个$arm.的输出格式,我们希望被分配到试验组的受试者应该排在对照组的前面。
proc format; value $arm "试验组" = 1 "对照组" = 2; run;
使用SQL过程选择数据集data1中所有观测,并使用order by语句对数据集data1按照变量arm在$arm.输出格式下的值进行排序。
proc sql noprint; create table data2 as select * from data1 order by put(arm, $arm.); quit;
输出结果如图:
如果想对多个变量进行自定义排序,可创建多个对应的输出格式,并使用order by语句同时对多个变量在各自输出格式下的值进行排序即可。
例如:下述代码同时对性别和组别进行自定义排序。
data data1; input name $ sex $ arm $; cards; AXLD F 试验组 GCHS F 对照组 IJNK M 对照组 OKLS M 试验组 NJDK F 试验组 PLDF F 对照组 TGSJ M 试验组 IDNG M 对照组 ; run; proc format; value $arm "试验组" = 1 "对照组" = 2; value $sex "F" = 1 "M" = 2; run; proc sql noprint; create table data2 as select * from data1 order by put(arm, $arm.), put(sex, $sex.); quit;