一:
最近在處理DA-EX-EC之間的聯(lián)系,因為要計算用藥依從性。
假設分3個階段用藥,第一個階段持續(xù)7天,每天吃1片;第二個階段也是持續(xù)7天,每天吃藥2片;第三個階段持續(xù)10天,每天3片。
如果受試者依從性很好,每天都按時按需服藥,那對于我們編程來說很友好,但是我們知道這幾乎不可能,很可能受試者第一階段就吃6天,少吃了,第二階段又吃了8天,多吃了。總之就是在不同階段都有“叛逆性”。
在計算依從性的時候,一開始的要求是6天按1片算,第二階段也要拿出一天納入第一階段,但是片數(shù)是按2片算大家可以看下數(shù)據(jù)集。如果最后的研究天數(shù)超過規(guī)定的研究天數(shù),超過的部分不納入計算。

如果按照規(guī)定的天數(shù)服藥,標準的EXSTDY和EXENDY分別是:
VISIT="Phase I";EXSTDY=1;EXENDY=7;
VISIT="Phase II";EXSTDY=8;EXENDY=14;
VISIT="Phase III";EXSTDY=15;EXENDY=24;
所以如果出現(xiàn)圖中那樣不“標準”的研究天數(shù)怎么處理呢?第一想法就是新建3個變量(或者6個變量),比如EXSTDY_1=1;EXENDY_1=7;EXSTDY_2=8;EXENDY_2=14.....但是這樣肯定要寫很多if else,而且只是看起來可行,實際操作過程肯定會有很多問題。
所以想到的一個解決方法就是output;按照研究天數(shù)加上do循環(huán)輸出所有的觀測。

然后根據(jù)新生成的i來判斷這條觀測所屬的VISIT。3個不同顏色的框代表根據(jù)規(guī)則衍生出新的訪視,可以發(fā)現(xiàn)是可行的,比如第7條它的EXDOSE是2,然后所屬VISIT是"Phase I",生成正確的訪視之后,我們只需要對每個訪視分別求和就可以求出每個訪視對應的依從性了。

二:
第二個問題還是跟do循環(huán)有關,也就是根據(jù)訪視窗的上限和下限衍生出對應的訪視,一般SAP會規(guī)定對應的訪視窗上下限值,很多人可能會寫很多個if else ,這樣程序可能會有點不美觀,對于這種有規(guī)律的值,我們只要找出相關的規(guī)律,之后用do循環(huán)就可以解決了。

我們發(fā)現(xiàn)上下限都是按照90遞增,找到了規(guī)律,接下來就是實現(xiàn)了:

就這一段簡單的程序,就能實現(xiàn)上面if else的效果。

三:判斷宏變量是不是存在,存在之后再繼續(xù)進行相關處理。
關于宏變量存不存在,以前的文章寫過一次
這次是在處理邏輯回歸的時候,先進行單因素分析,之后對單因素分析中顯著的自變量再納入多因素分析,那這時候我們肯定要先判斷有哪些自變量顯著。處理邏輯就是把顯著的自變量處理成宏變量,再導入到多因素回歸分析中。

單因素分析后,我們可以篩選出顯著的自變量:
proc sql;
select Variable into :mulvar?separated by?" " from logis(where=(ProbChiSq<0.05));
quit;
/*%put &mulvar;*/
但是有可能所有自變量都不顯著,這時候如果我們直接導入到多因素回歸分析中,會報錯,所以我們得先判斷下這個宏變量是否存在,不存在的話再采用另一種解決方式:
%macro exist();
????%if %symexist (mulvar) %then %do;
???????? proc logistic data=XXXX;
model?因變量=&mulvar/SELECTION=STEPWISE ;
???????? run;
????%end;
????%else %do;
/*create?empty datasets*/
%end
%mend;