Групиране на наблюденията по променлива

съжалявам, ако това е излишно в друга публикация, но не можах да намеря отговор при търсене.

Имам дълъг списък с лекарства и няколко лекарства имат множество дози, напр.

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

Опитвам се да напиша SAS код, за да създам трета променлива (newmed), която ще присвои ново име на всяко лекарство без дозата (напр. всички дози от лекарство А ще се наричат ​​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;

Опитах също това с помощта на изрази "или", повтаряйки новото име на med в целия списък с оператори 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
@Reeza, съгласен съм. Затова попитах как всъщност изглеждат стойностите.   -  person DomPazz    schedule 19.03.2015
comment
Имайте предвид, че това, което правите, е съпоставяне на малки и малки букви. Ако вашите данни и код не съвпадат в този случай, ще получите напълно празна нова мед колона. Често ще искате да използвате 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