SAS 刷題
quiz

要求很清楚,給 vs 增加三個(gè) variables,對(duì)于每個(gè) subject,其中 visit id 為 0 的 test,增加 flag 變量值為 Y,并取出當(dāng)次 base visit 時(shí) test 的值,作為后續(xù)每次 visit 的 baseline,以便計(jì)算 change from baseline。
數(shù)據(jù)集的基本情況如下,

厘清思路
其實(shí),整體思路也很清楚,所以我先提供一種 code,有不同的 code,歡迎留言討論,
data vs_bl;
? ?length basefl $1. base base1 chg 8.;
? ?drop base1;
? ?do until(last.vstest);
? ? ? ?set vs;
? ? ? ?by subjid vstest;
? ? ? ?if visid= 0 then do;
? ? ? ? ? ?basefl= "Y";
? ? ? ? ? ?base1= aval;
? ? ? ?end;
? ? ? ?else if visid>0 then do;
? ? ? ? ? ?basefl= "";
? ? ? ? ? ?base= base1;
? ? ? ?end;
? ? ? ?
? ? ? ?chg= aval-base;
? ? ? ?output;
? ?end;
run;
認(rèn)真看過(guò)之前推文的小伙伴,應(yīng)該一眼就看出來(lái)了,這又是 dow loop 的個(gè)人秀。對(duì)于這里的要求,dow 蠻適合的。
我們以 subjid、vstest 為 by 分類,取同一個(gè) subject 每一項(xiàng) test 的最后一次為 do until 的判定條件,后面的 code 雖然看上去很簡(jiǎn)單,但是我要特別提醒大家注意??,一旦 visit id 為 0 的該行記錄被處理后,basefl 和 base1 的值在這次 data step 迭代中,只能被覆蓋更新,而不會(huì)被下一次 do loop 所重置為缺失值。這個(gè)東西,我們以前講過(guò),即 do loop 是在一次 data step 的 PDV 之中覆蓋更新值的,一定要注意。
細(xì)節(jié)
SAS 中,除 macro、sql 等之外,基本上 data step 的根基和靈魂就是 PDV。正確且清晰地設(shè)想 PDV 中 SAS 所涉及到的操作,是掌握好 base SAS programming 的基礎(chǔ)。一屋不掃,無(wú)以當(dāng)掃地僧??
非常感謝你能看到這里,如果你覺(jué)得寫(xiě)得還不錯(cuò)的話,求轉(zhuǎn)發(fā)求關(guān)注,我們下篇文章再見(jiàn)?????????