重命名SAS中的重复观察

时间:2016-02-03 20:17:13

标签: sas

所以我一直试图找出如何在SAS中重命名ID变量(我制作了一个虚拟数据集来尝试这个,见下文)

DATA trial;
input hno $ y;
datalines;
a 1
a 2
a 3
a 4
b 3
b 5
cd 5
cd 6
cd 1
;
run;

我需要做的就是拥有所有a=1b=2cd=3等等,但代码需要转移到数据集,其中包含大约30,000个观察结果不同的ID。我一直在玩first.id和last.id,但绝对没有用。有人可以帮忙吗?

提前谢谢!

EDIT 所以为了澄清,我需要产生输出的代码: a 1 1 a 2 1 a 3 1 a 4 1 b 3 2 b 5 2 cd 5 3 cd 6 3 cd 1 3

其中第三列是ID变量,每个唯一的hno值增加一个

2 个答案:

答案 0 :(得分:2)

如果数据按HNO排序,则会将HNO编码为索引。 SAS中的RENAME通常是指变量,数据集等对象。

DATA trial;
   input hno $ y;
   datalines;
a 1
a 2
a 3
a 4
b 3
b 5
cd 5
cd 6
cd 1
;
   run;
data trial2;
   set trial;
   by hno;
   if first.hno then id + 1;
   run;
proc print;
   run; 

如果您的输入未按照PROC SUMMARY创建并索引ID数据集,并使用KEYed SET添加ID。

DATA trial;
   input hno $ y @@;
   datalines;
a 1 a 2 b 3 b 5 cd 5 cd 6 a 3 a 4
cd 1
;
   run;
proc summary nway data=trial;
   class hno;
   output out=index(drop=_type_ _freq_ rename=(_level_=id) index=(hno)) / levels;
   run;
proc print;
   run;
data trial2;
   set trial;
   set index key=hno/unique;
   run;
proc print;
   run;

enter image description here

答案 1 :(得分:0)

您也可以尝试format

proc format;
    value $ cn
    'a' = 1
    'b' = 2
    'cd' = 3
    ;
run;

DATA trial;
    input hno $ y;
    *format hno $cn.;
    id = put(hno, $cn.);
datalines;
a 1
a 2
a 3
a 4
b 3
b 5
cd 5
cd 6
cd 1
;
run;