Re: [程式] SAS IF/ELSE RETAIN 觀念問題
※ 引述《bbearh (go)》之銘言:
: 又來請教板上大大.
: 有關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 的使用目的是什麼? 覺得自己的觀念還是模糊的.
: ---------------------------------
基本上 if then do end的觀念都沒錯
retain 的觀念也對
但是就差在 retain這個語法 本身就是保留數值給下一個觀察值使用
本身已經具有lag function的意味在
當你在if then 的語法中使用了 lag function來改變時
會變成 跳兩個觀察值使用
retain imply one lag (就我個人使用的看法)
因此 要下條件
通常都針對 第一個數據做調整即可
data eee;
set ddd;
retain acc 0;
acc=acc+vol;
if id^=lag(id) then acc=vol;
run;
以這樣來做
acc會不斷累加 但是滿足 id^=lag(id)時 就會回到vol值重新計算
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.250.118.48
推
01/29 10:45, , 1F
01/29 10:45, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):