Группировка наблюдений по переменной

извините, если это лишнее в другом посте, но не смог найти ответ при поиске.

У меня есть длинный список лекарств, и некоторые лекарства имеют несколько доз, например:

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. В любом случае программа запускается, но новый набор данных medsorted не содержит записей в столбце newmed — он пуст.

Что я делаю не так?

Спасибо!


person justtheeric    schedule 18.03.2015    source источник
comment
Ваши данные в первой части не соответствуют тому, что вы проверяете в DISCHARGE_MEDICATION_NAME. Можете ли вы опубликовать фактические значения этой переменной?   -  person DomPazz    schedule 19.03.2015
comment
Посмотрите на функцию сканирования, чтобы извлечь первую часть названия лекарства. Если название вашего лекарства более сложное, это не сработает.   -  person Reeza    schedule 19.03.2015
comment
@Риза, согласен. Вот почему я спросил, как на самом деле выглядят значения.   -  person DomPazz    schedule 19.03.2015
comment
Имейте в виду, что то, что вы делаете, — это сопоставление с учетом регистра. Если ваши данные и код не совпадают, вы получите совершенно пустую новую колонку med. Часто вы захотите использовать if lowcase(VAR) = 'lower case name' then ....   -  person pteranodon    schedule 19.03.2015


Ответы (1)


Судя по небольшому количеству предоставленных вами данных, вы можете использовать SUBSTR.

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

Если ваши данные более разнообразны, опубликуйте больше примеров.

person Jay Corbett    schedule 19.03.2015