2015-03-18 24 views
0

对不起,如果这在另一篇文章中是冗余的,但在搜索时找不到答案。通过变量对观测进行分组

我有药物的一个长长的清单,和一些药物有多种剂量,例如:

Medication A 3 mg tablet 
Medication A 5 mg tablet 
Medication B 3 mg tablet 
Medication B 5 mg tablet 

我一直在尝试写SAS代码来创建一个第三个变量(newmed),这将分配一个新名称到没有剂量的每种药物(例如,所有药物A剂量将被称为MedA,所有药物B剂量将被称为MedB)。这里是我的代码:

data medsorted; 
SET library.meds; 
if DISCHARGE_MEDICATION_NAME="med1_7.5_mg_tablet" THEN newmed= "med1"; 
if DISCHARGE_MEDICATION_NAME="med1_6_mg_tablet" THEN newmed= "med1"; 

if DISCHARGE_MEDICATION_NAME="med2_100_mg/ml_subcutaneous_syringe" THEN newmed= "med2"; 
if DISCHARGE_MEDICATION_NAME="med2_120_mg/ml_subcutaneous_syringe" THEN newmed = "med2";  

/*etc - the list of med goes on*/ 

run; 

我也尝试使用这个“或”语句,在if语句的整个列表迭代新的MED名。无论哪种方式,该程序运行,但新数据集medsorted没有任何条目在新的列 - 它是空白的。

我在做什么错?

谢谢!

+3

你在第一部分数据不与你在'DISCHARGE_MEDICATION_NAME'检查排队。你可以发布该变量的实际值吗? – DomPazz 2015-03-18 22:47:53

+0

查看扫描功能以提取药物名称的第一部分。如果你的药物名称更复杂,这是行不通的。 – Reeza 2015-03-19 00:11:19

+0

@Reeza,同意。这就是为什么我问这些值的实际情况。 – DomPazz 2015-03-19 00:23:08

回答

0

从您提供的少量数据中,您似乎可以使用SUBSTR函数。

Data medsorted; 
LENGTH NEWMED $4; 
SET library.meds; 
NEWMED=substr(DISCHARGE_MEDICATION_NAME, 1, 4); 

如果你的数据比这更多样化,更转贴例子

相关问题