您寻求的是数据转置方法,至少有以下两种可选:
1. 使用proc transpose过程步进行转置;
2. 基于数组循环,使用output语句进行转置;
前者是模块化的,语句固定,简单易用。后者更为灵活,也需要花费更多的精力才能掌握。
- data have;
- input id$ RULE_a RULE_cc RULE_x;
- cards;
- 01 0.1 0.5 0.9
- ;
- run;
- *1. 使用proc transpose进行转置;
- proc transpose data=have out=want;
- by id;
- var RULE_a RULE_cc RULE_x;
- run;
- data want;
- set want(rename=(_NAME_=RULE COL1=aval));
- RULE=scan(vname(RULE),2,'_');
- run;
- *2. 使用数组循环+output语句进行转置;
- data want(drop=RULE_a RULE_cc RULE_x);
- set have;
- array _par_ RULE_a RULE_cc RULE_x;
- do over _par_;
- RULE=scan(vname(_par_),2,'_');
- aval=_par_;
- output;
- end;
- run;
复制代码