t********m 发帖数: 939 | 1 data set 如下:
id seq var
1 1 11
1 4 22
1 5 33
1 6 44
1 7 55
1 8 66
2 1 11
2 2 22
2 8 33
3 1 11
3 2 22
3 3 33
3 4 44
3 5 55
3 6 66
3 7 77
3 8 88
大多数id都有8个seq,但少数id缺了其中的一个或一些,比如说id 1 和id 2。现在在
每个id里面,我想将var的值往下移一行,也就是说对应下一个seq,var用它前面一个
seq对应的var的值,而第一个seq对应的var的值设为missing,最后一个seq对应的var
的值弃之不用。也就是我想得到的data set是这样的:
id seq var
1 1 .
1 4 11
1 5 22
1 6 33
1 7 44
1 8 55
2 1 .
2 2 11
2 8 22
3 1 .
3 2 11
3 3 22
3 4 33
3 5 44
3 6 55
3 7 66
3 8 77
如果所有的id都有连续的8个seq,我在sas里面可以实现我想要的,可是现在这种情况
我怎么也得不到我想要的。求大侠们指点一二,不甚感激啊! |
k*******a 发帖数: 772 | 2 data test;
input id seq var;
datalines;
1 1 11
1 4 22
1 5 33
1 6 44
1 7 55
1 8 66
2 1 11
2 2 22
2 8 33
3 1 11
3 2 22
3 3 33
3 4 44
3 5 55
3 6 66
3 7 77
3 8 88
;
run;
data test2;
set test(rename=(var=var1));
by id;
var = lag(var1);
if first.id then var=.;
drop var1;
run; |
t********m 发帖数: 939 | 3 哎呀,太感谢你了。纠结了好几天了,用各种办法试过,压根没想到sas里面有lag这个
命令呀。再次感谢!
【在 k*******a 的大作中提到】 : data test; : input id seq var; : datalines; : 1 1 11 : 1 4 22 : 1 5 33 : 1 6 44 : 1 7 55 : 1 8 66 : 2 1 11
|
n*****n 发帖数: 3123 | 4 靠,难道你不知道:内事不决问老婆,外事不决问Google
【在 t********m 的大作中提到】 : 哎呀,太感谢你了。纠结了好几天了,用各种办法试过,压根没想到sas里面有lag这个 : 命令呀。再次感谢!
|
j********t 发帖数: 201 | 5 interesting...
the tile mentions "lag"..i thought you have questions regarding lag function
... |
c*******o 发帖数: 8869 | 6 如果SAS是正版的话, 打个技术支持电话一分钟就搞定了, 比GOOGLE也不慢。
【在 t********m 的大作中提到】 : 哎呀,太感谢你了。纠结了好几天了,用各种办法试过,压根没想到sas里面有lag这个 : 命令呀。再次感谢!
|
t********m 发帖数: 939 | 7 哎,上面的童鞋批评的是,我咋笨到这种程度了呢,就没想到用sas lag google一下。
虚心接受批评,下回争取能聪明点儿。 |