Подмножество набора данных в SAS путем ссылки на внешний текстовый файл

Я работаю с набором данных FDA, который содержит данные о реакциях на фармацевтические препараты. Я пытаюсь разделить данные по названиям наркотиков. У меня есть внешний текстовый файл с названиями интересующих меня препаратов. Я хочу создать подмножество данных, состоящее из интересующих меня препаратов. Мой внешний текстовый файл называется SSRIFULL.txt, а имя переменной — DRUGNAME. Я пробовал много вещей, которые были явно неправильными

i.e.

ДАННЫЕ SSRIFULL2;

---- УСТАНОВИТЬ SSRIFULL;

---- Если название лекарства ~= "P:\APPRENTICESHIP\SSRI_LIST.txt", то удалить;

Бежать;

и я не могу найти какую-либо литературу по этому вопросу напрямую. Должен ли я больше изучать темы по truncover или, может быть, по proc sql? Текстовый файл содержит список примерно из 20 лекарств. Я также открыт для некоторого типа встроенного кода, но по какой-то причине SAS это не нравится...

ДАННЫЕ SSRIFULL2;

---УСТАНОВИТЬ SSRIFULL;

------ЕСЛИ (ВОЗРАСТ >19) ИЛИ (ВОЗРАСТ = .) Затем Удалить;

------Если (НАЗВАНИЕ ЛЕКАРСТВА ~= 'кломипрамин' ИЛИ ​​'флувоксамин' или 'паксил' или 'пароксетин' или 'прозак'

------ или "флуоксетин", или "сероквель", или "велбутрин", или "бупропион", или "золофт", или "сертралин"

------ИЛИ 'Zyban') Затем Удалить;

БЕЖАТЬ;

Как, вероятно, очевидно, у меня нет большого опыта работы с SAS, я просто пытаюсь получить этот набор данных, пригодный для анализа на данный момент. Спасибо за любую помощь заранее


person Kyle    schedule 02.04.2013    source источник
comment
Содержит ли ваш внешний файл, содержащий названия лекарств, каждое лекарство в одной строке (имеется в виду, что в файле около 20 строк)?   -  person BellevueBob    schedule 03.04.2013


Ответы (1)


Вам следует обратиться к документации SAS, чтобы изучить необходимый синтаксис. Ваша вторая попытка была довольно близкой, но это правильно:

DATA SSRIFULL2;
 SET SSRIFULL;
 IF (AGE >19) OR (AGE = .) Then Delete;
 If DRUGNAME in ('clomipramine' 'fluvoxamine' 'Paxil' 'paroxetine' 'Prozac' 'fluoxetine' 'Seroquel'  'Wellbutrin' 'bupropion' 'Zoloft' 'sertraline' 'Zyban') then delete;
RUN;

Обратите внимание, что имена, хранящиеся в переменной drugname, будут чувствительны к регистру, поэтому, если, скажем, переменная "paxil" и вы пытаетесь сопоставить "Paxil", это не сработает. Вы можете использовать функцию lowcase, чтобы справиться с этим.

Чтобы реализовать что-то вроде вашей первой попытки, вам нужно будет прочитать файл в наборе данных SAS, а затем использовать его для сопоставления на втором этапе:

data ssri_list;
 length drugname $50.;
 infile 'P:\APPRENTICESHIP\SSRI_LIST.txt';
 input drugname$;
run;

proc sql;
 create table ssrifull2 as
  select * from ssrifull where 0<=age<19 and drugname not in
   (select drugname from ssri_list);
quit;

или что-то типа того.

person itzy    schedule 02.04.2013
comment
Спасибо за поддержку. Ваше исправление сработало, и спасибо за подсказку о функции нижнего регистра, так как эти данные - полный беспорядок. - person Kyle; 03.04.2013
comment
+1 за второй ответ; Я бы изменил его, чтобы использовать функции UPCASE или LOWCASE для обеих ссылок на drugname, чтобы сделать его еще лучше! - person BellevueBob; 03.04.2013