在SAS中自动创建指标变量

时间:2018-09-10 19:21:11

标签: sas

我正在使用SAS数据集,该数据集包括针对单个患者开出的多达30种药物。药物编码为med1,med2 ... med30。每种药物均由5位数字的字符变量表示。然后,使用标识符,我可以编码药物的名称,以及该特定药物是局部抗生素还是全身性抗生素。

对于每位患者,我想使用所有30种药物代码创建一个变量,指示该患者是仅使用局部抗生素,仅使用全身抗生素还是同时使用局部和口服抗生素。因此,如果30种药物中的任何一种是全身性抗生素,我都希望患者编码为oral_antibiotic = 1。

我目前有以下代码:     数据不足;         设置有             数组meds [30] med1-med30;             如果('06925''06920')中的meds [i],则执行;                     青霉素= 1;                     口服抗生素= 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;  

2 个答案:

答案 0 :(得分:0)

  

我认为我确实需要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。

答案 1 :(得分:0)

我同意您可能每个药物组仅需要一个指标变量(感兴趣的药物)。好像您只是想为每个主题都知道,“他们有吗?”本示例翻转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; 

enter image description here