g**u 发帖数: 205 | 1 木有思路啊~~~就算给个提示也好 T_T
有这么个data set,学生体重
data weights;
input type age weight;
datalines;
t 6 77
t 7 84
s 6 88
s 6 68
s 7 92
x 6 53
x 7 69
x 7 88
x 8 84
;
run;
我想加个variable进去,叫Change,用来表示体重是增加了还是减少。如果前一个比后
一个高,type=1;如果前一个比后一个低,type=0。
想了好几个思路,if/then, sql,但都不知道怎么用code来比较。
麻烦了,帮我想想吧 |
v******i 发帖数: 1246 | |
t*******t 发帖数: 633 | 3 可以用retain但是新手比较难handle。
用lag吧:
data weights_lag;
set weights;
weight_pre=lag(weight);
ind=(weight_pre
run;
看看是不是你想要的?
【在 g**u 的大作中提到】 : 木有思路啊~~~就算给个提示也好 T_T : 有这么个data set,学生体重 : data weights; : input type age weight; : datalines; : t 6 77 : t 7 84 : s 6 88 : s 6 68 : s 7 92
|
g**u 发帖数: 205 | 4 @_@ 还是不明白
【在 v******i 的大作中提到】 : transpose一下什么都解决了
|
g**u 发帖数: 205 | 5 很接近了。但如果是相同type的来比较,而且change在每种type的第一个value是0呢?
【在 t*******t 的大作中提到】 : 可以用retain但是新手比较难handle。 : 用lag吧: : data weights_lag; : set weights; : weight_pre=lag(weight); : ind=(weight_pre: run; : 看看是不是你想要的?
|
t*******t 发帖数: 633 | 6 酱紫呢?
data weights_lag;
set weights;
weight_pre=lag(weight);
type_pre=lag(type);
if type_pre=type then
ind=(weight_pre
else ind=0;
run;
【在 g**u 的大作中提到】 : 很接近了。但如果是相同type的来比较,而且change在每种type的第一个value是0呢?
|
c******n 发帖数: 380 | 7
那就再加上
by type;
if first.type then ind=0;
else ind=.........;
【在 g**u 的大作中提到】 : 很接近了。但如果是相同type的来比较,而且change在每种type的第一个value是0呢?
|
g**u 发帖数: 205 | 8 Exactly what I'm looking for!
谢啦~~~~膜拜高手ing
【在 t*******t 的大作中提到】 : 酱紫呢? : data weights_lag; : set weights; : weight_pre=lag(weight); : type_pre=lag(type); : if type_pre=type then : ind=(weight_pre: else ind=0; : run;
|
g**u 发帖数: 205 | 9 嗯,这个也可以的。谢啦。
我刚才还在想要不要用proc tabulate来class一下再table
不过用by和first.type ,last.type更好,没有再增加新的proc
【在 c******n 的大作中提到】 : : 那就再加上 : by type; : if first.type then ind=0; : else ind=.........;
|
v******i 发帖数: 1246 | 10 proc transpose ....
so that you get
type age1 weight1 age2 weight2
【在 g**u 的大作中提到】 : @_@ 还是不明白
|
s*********2 发帖数: 11 | 11 using dif1 function.
solution:
data weights;
input type $ age weight;
datalines;
t 6 77
t 7 84
s 6 88
s 6 68
s 7 92
x 6 53
x 7 69
x 7 88
x 8 84
;
run;
data change; set weights;
change=dif1(weight);
if change=. then type=.;
else if change<0 then type=1;
else if change>0 then type=0;
proc print data=change;run; |