作者bbearh (go)
看板Statistics
标题[程式] SAS IF/ELSE RETAIN 观念问题
时间Sun Jan 29 00:01:40 2012
又来请教板上大大.
有关data process 过程,
本觉得已经懂了. 但是有时结果仍不是我想像的.
如果可能的话, 帮我解释这样写为什麽不对.
data ddd;
input id name$ vol ;
cards;
1 A 10
1 A 12
1 A 9
1 A 3
2 B 4
2 B 5
2 B 6
2 B 7
8 C 1
8 C 1
8 C 1
;
run;
*算分组累积和;
data eee;
set ddd;
retain acc 0;
* acc=-10000;
if id^=lag(id) then do;
acc=vol;
end;
else if id=lag(id) then
acc=acc+vol;
else
acc=-999; <--- 第2 row 为何会跑到这case
run;
* if else then do end 这样写没错吧! 已被data弄得没什麽信心
* retain 的使用目的是什麽? 觉得自己的观念还是模糊的.
---------------------------------
此程式的结果 希望的结果
1 A 10 10 10
1 A 12 -999 22
1 A 9 -990 31
1 A 3 -987 34
2 B 4 4 4
2 B 5 -999 9
2 B 6 -993 15
2 B 7 -986 23
8 C 1 1 1
8 C 1 -999 2
8 C 1 -998 3
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.204.207.72
1F:→ majora:试着先在一个data step 把lag(id)存成另一个variable 01/29 00:20
2F:→ majora:这样在用你的逻辑,就会对了!! 你可以用PDV来看为什麽错 01/29 00:22
3F:→ majora:每一个if後面 put _all_ 会帮助你看到data step是怎麽运作 01/29 00:24
4F:→ bbearh:有指令可以show当时的 pdv吗? THANKS 01/29 11:10