通过引用外部文本文件来设置SAS中的数据集

时间:2013-04-02 23:15:42

标签: sas subset data-manipulation

我正在处理来自FDA的数据集,其中包含有关药物反应的数据。我试图通过药物名称对数据进行分组。我有一个外部文本文件,其中包含我感兴趣的药物名称。我想创建一个由我感兴趣的药物组成的数据子集。我的外部文本文件名为SSRIFULL.txt,变量名称为DRUGNAME。我尝试了许多明显错误的事情

DATA SSRIFULL2;

---- SET SSRIFULL;

----如果Drugname〜=“P:\ APPRENTICESHIP \ SSRI_LIST.txt”则删除;

运行;

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

DATA SSRIFULL2;

--- SET SSRIFULL;

------ IF(年龄> 19)或(年龄=。)然后删除;

------如果(DRUGNAME~ ='氯米帕明'或'氟伏沙明'或'帕罗西汀'或'帕罗西汀'或 '百忧解'

------或'氟西汀'或'Seroquel'或'Wellbutrin'或'安非他酮'或'左洛夫'或'舍曲林'

------或'Zyban')然后删除;

RUN;

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

1 个答案:

答案 0 :(得分:2)

您应该参考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;

或类似的东西。