【问题标题】:Subsetting data set in SAS by referencing an external text file通过引用外部文本文件对 SAS 中的数据集进行子集化
【发布时间】:2013-04-03 07:47:06
【问题描述】:

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

数据 SSRIFULL2;

---- 设置 SSRIFULL;

---- 如果 Drugname ~= "P:\APPRENTICESHIP\SSRI_LIST.txt" 则删除;

运行;

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

数据 SSRIFULL2;

---设置 SSRIFULL;

-----IF (AGE >19) OR (AGE = .) Then Delete;

-----如果 (DRUGNAME ~= 'clomipramine' OR 'fluvoxamine' or 'Paxil' or 'paroxetine' or “百忧解”

-----或“氟西汀”或“思瑞康”或“维布特林”或“安非他酮”或“唑洛夫”或“舍曲林”

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

运行;

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

【问题讨论】:

  • 您的包含药物名称的外部文件是否将每种药物放在一行中(意味着文件中有 20 行左右)?

标签: sas subset data-manipulation


【解决方案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;

或类似的东西。

【讨论】:

  • 感谢您的支持。您的修复工作有效,感谢您提供有关小写函数的提示,因为此数据非常混乱。
  • +1 表示第二个答案;我会修改它以在对 drugname 的两个引用上使用 UPCASELOWCASE 函数以使其更好!
猜你喜欢
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多