通过引用外部文本文件在SAS中对数据集进行子集设置

通过引用外部文本文件在SAS中对数据集进行子集设置,sas,subset,data-manipulation,Sas,Subset,Data Manipulation,我正在使用FDA提供的数据集,其中包含有关药物反应的数据。我试图用药物的名称来划分数据。我有一个包含我感兴趣的药物名称的外部文本文件。我想创建由我感兴趣的药物组成的数据子集。我的外部文本文件名为SSRIFULL.txt,变量名为DRUGNAME。我尝试了很多明显错误的事情 i、 e 数据集2 --设置SSRIFULL --如果Drugname~=p:\peediship\SSRI_LIST.txt,则删除 运行 我找不到任何关于这件事的文献。我是否应该更多地了解有关truncover或proc

我正在使用FDA提供的数据集,其中包含有关药物反应的数据。我试图用药物的名称来划分数据。我有一个包含我感兴趣的药物名称的外部文本文件。我想创建由我感兴趣的药物组成的数据子集。我的外部文本文件名为SSRIFULL.txt,变量名为DRUGNAME。我尝试了很多明显错误的事情

i、 e

数据集2

--设置SSRIFULL

--如果Drugname~=p:\peediship\SSRI_LIST.txt,则删除

运行

我找不到任何关于这件事的文献。我是否应该更多地了解有关truncover或proc sql的主题?文本文件包含约20种药物的列表。我对某些类型的内联代码也持开放态度,但由于某些原因SAS不喜欢这样

数据集2

--设置SSRIFULL

---如果年龄>19岁或年龄=。然后删除

---如果DRUGNAME~=“氯丙咪嗪”或“氟伏沙明”或“帕罗西汀”或 “百忧解”

---或“氟西汀”或“赛洛奎尔”或“韦布曲林”或“安非他酮”或“佐洛特”或“舍曲林”

---或“Zyban”,然后删除

运行

很可能很明显,我没有很多使用SAS的经验,我只是想让这个数据集在此时可用于分析。
提前感谢您的帮助

您应该查阅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;

或者类似的东西。

包含药物名称的外部文件是否将每种药物都放在一行上表示该文件中有20行左右?感谢您的支持。您的修复工作正常,感谢您提供关于lowcase函数的提示,因为此数据非常混乱。第二个答案为+1;我会修改它,在对drugname的两个引用上使用UPCASE或LOWCASE函数,以使其更好!