Sas 按变量分组观察结果

Sas 按变量分组观察结果,sas,grouping,renaming,Sas,Grouping,Renaming,抱歉,如果这是另一篇文章,但在搜索时找不到答案 我有一长串的药物,有几种药物有多种剂量,例如: 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

抱歉,如果这是另一篇文章,但在搜索时找不到答案

我有一长串的药物,有几种药物有多种剂量,例如:

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;
我还尝试使用“or”语句,在整个if语句列表中迭代新的med名称。无论哪种方式,程序都会运行,但新的数据集medsorted在newmed列中没有任何条目-它是空的

我做错了什么


谢谢

从您提供的少量数据来看,您似乎可以使用该功能

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

如果您的数据变化较大,请重新发布更多示例

第一部分中的数据与您正在签入的数据不一致
出院\u用药\u姓名
。您能在该变量中发布实际值吗?查看scan函数以提取药物名称的第一部分。如果你的药名比较复杂,这就行不通了。@Reeza,同意。这就是为什么我问这些值实际上是什么样子的。请注意,您所做的是区分大小写的匹配。如果您的数据和代码在case中不匹配,您将得到一个完全空的新med列。通常,如果lowcase(VAR)=“小写名称”,您会希望使用
,然后…