Friday, December 22, 2006

.first and .last

发信人: Bighappy (快乐大大大), 信区: Statistics标 题: SAS变量生成求助
发信站: BBS 未名空间站 (Wed Dec 20 15:31:31 2006)

我现在有一个数据如下:



id phase
1 predose
1 predose
1 predose
1 postdose
1 postdose
1 postdose
1 postdose
2 predose
2 predose
2 predose
2 predose
2 postdose
2 postdose
2 postdose

现在我想生成一个新变量: etime.其值依据phase而变: 设定最后一个predose时为0
,然后当phase为postdose,逐步加1;反之,前面的predose逐步减1。如下

id phase etime
1 predose -2
1 predose -1
1 predose 0
1 postdose 1
1 postdose 2
1 postdose 3
1 postdose 4
2 predose -3
2 predose -2
2 predose -1
2 predose 0
2 postdose 1
2 postdose 2
2 postdose 3

麻烦是每个的id不同,无法用一个统一的etime最小值。我只能先就每个id找最后一个
predose,然后分向上递减和向下递增。用什么样的SAS程序来做呀?我试过first.
phase和last.phase,似乎很难,大侠有好办法吗?

发信人: comeandgo (春困秋乏夏打盹), 信区: Statistics
标 题: Re: SAS变量生成求助
发信站: BBS 未名空间站 (Thu Dec 21 00:43:30 2006)

let me try something else:

data aaa;
input id $ phase $;
cards;
1 predose
1 predose
1 postdose
1 postdose
.....
;
run;
proc sort; by id phase; run;
data aaa pred;
set aaa;
by id phase;
if first.phase then etime=1;
else etime+1;
output aaa;
if last.phase and phase='predose' then output pred;
run;
data aaa;
merge aaa pred(keep=id etime rename=(etime=count));
by id;
if phase='predose' then etime=etime-count;
run;

No comments: