簡體   English   中英

在SAS中自動創建指標變量

[英]Automating creation of an indicator variable in SAS

我正在使用SAS數據集,該數據集包括針對單個患者開出的多達30種葯物。 葯物編碼為med1,med2 ... med30。 每種葯物均由5位數字的字符變量表示。 然后,使用標識符,我可以編碼葯物的名稱,以及該特定葯物是局部抗生素還是全身性抗生素。

對於每位患者,我想使用所有30種葯物代碼創建一個變量,指示該患者是僅使用局部抗生素,僅使用全身抗生素還是同時使用局部和口服抗生素。 因此,如果30種葯物中的任何一種是全身性抗生素,我都希望患者編碼為oral_antibiotic = 1。

我目前有這樣的代碼: 設置有 數組meds [30] med1-med30; 如果('06925''06920')中的meds [i],則執行; 青霉素= 1; oral_antibiotic = 1; 結束; 否則,如果('03197')中的meds [i]執行; 抗生素軟膏= 1; topical_antibiotic = 1; 結束; ....(更多葯物會循環使用);

問題在於此代碼創建的是一個指標變量而不是30,從而覆蓋了先前的信息。

我認為我確實需要30個指標變量,指示這30種葯物中的每一種是口服抗生素還是局部抗生素,在我寫代碼說如果任何一種葯物是口服抗生素之前,患者都接受了口服抗生素。

我是宏的新手,非常感謝您的幫助。

data current; 
input med1 med2 med3; 
cards; 
'06925' '06920' '03197' ; 
run; 

我想要這個:

data want; 
input med1 topical_antibiotic1 oral_antibiotic1 med2 topical_antibiotic2 oral_antibiotic2 med3 topical_antibiotic3 oral_antibiotic3; 
cards; 
'06925' 0 1 '06920' 0 1 '03197' 1 0 
; 
run;  

我認為我確實需要30個指標變量,指示這30種葯物中的每一種是口服抗生素還是局部抗生素,在我寫代碼說如果任何一種葯物是口服抗生素之前,患者都接受了口服抗生素。

這不是真的。 只要不重置它們,您當前的方法就可以。 您沒有向我們展示完整的代碼,因此很難說,但是我將假設這就是這里發生的事情。

您的循環應如下所示:

array med(30) med1-med30;
*set to 0 at top of the loop;
topical_antibiotic=0; oral_antibiotic=0;

do i=1 to dim(med);
   if med(i) in (.....) /*list of topical codes*/ then topical_antibiotic=1;
   else if med(i) in (.....) /*list of oral codes*/ then oral_antibiotic=1;
end;

這假定抗生素不能同時在局部/口服組中使用。 如果可以,則需要從第二個IF語句中刪除ELSE。

我同意您可能只需要為每個葯物組使用一個指標變量(感興趣的葯物)。 好像您只是想為每個主題都知道,“他們有嗎?” 本示例翻轉IN運算符的參數。 如果您提供了更多示例數據,則本例可以做得更好。

data current; 
   infile cards missover;
   array med[3] $5;
   input med[*]; 
   oral_antibotic    = '069'   in: med; /*Assume oral all start with '069'*/;
   topical_antibotic = '03197' in med;
   cards; 
06925 06920 03197
06925 
;;;; 
   run; 

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM