首页 > 解决方案 > 在 SAS 中自动创建指示变量

问题描述

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

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

我目前有这个代码:数据需要;设置有;数组 meds[30] med1-med30; 如果 meds[i] in ('06925' '06920') 然后做;青霉素=1;口服抗生素=1;结尾; else if meds[i] in ('03197') then do; 新孢菌素=1;局部抗生素=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;  

标签: sas

解决方案


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

在此处输入图像描述


推荐阅读