2015-03-18 3 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; 

Я также попытался это с помощью «или» заявления, итерация нового МЕД имени по всему списку, если заявления. В любом случае, программа запускается, но новый набор данных не поддерживает никаких записей в новом столбце - он пуст.

Что я делаю неправильно?

Спасибо!

+3

Ваши данные в первой части не выравнивают с тем, что вы проверяете в 'DISCHARGE_MEDICATION_NAME'. Можете ли вы публиковать фактические значения в этой переменной? – DomPazz

+0

Посмотрите на функцию сканирования, чтобы извлечь первую часть названия лекарственного средства. Если ваше название препарата больше, это не сработает. – Reeza

+0

@ Reeza, согласен. Вот почему я спросил, как выглядят ценности. – DomPazz

ответ

0

Из небольшого количества данных, которые вы предоставили, похоже, что вы можете использовать функцию SUBSTR.

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

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

Смежные вопросы