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 input(put(arm, $arm.), best.), input(put(sex, $sex.), best.);
quit;

 

posted @ 2021-08-02 22:06  Snoopy1866  阅读(1104)  评论(0编辑  收藏  举报