【发布时间】:2019-05-25 18:10:20
【问题描述】:
我有一个 SAS 数据步骤语句 –
Data work.CABGothers2;
set work.CABGothers1;
IF proc_p in (a HUGE LIST OF ICD10 CODES) and PDDCABG = 1
and TypeofCABG_PDDTemp = . then TypeofCABG_PDDTemp = 4;
IF proc2 in (a HUGE LIST OF ICD10 CODES) and PDDCABG = 1
and TypeofCABG_PDDTemp = . then TypeofCABG_PDDTemp = 4;
IF proc3 in (a HUGE LIST OF ICD10 CODES) and PDDCABG = 1
and TypeofCABG_PDDTemp = . then TypeofCABG_PDDTemp = 4;
...
run;
这个 IF-THEN 部分持续了 21 次,因此您可以想象这个 sas 代码文件变得多么庞大和繁琐,尤其是在对 ICD10 代码列表进行任何修改时。它必须在所有 proc1,proc2... 列中单独更改。
此外,ICD10 列表非常庞大,有超过 7000 个代码,我想知道是否有人可以向我展示一个更好的 SAS 代码,它可以将文件中的一列数据(ICD10 代码)作为输入。
我想要一个 proc sql 或 Data step 过程。哪个更有效。
当前代码-
Data work.CABGothers2;
set work.CABGothers1;
IF proc_p in (a HUGE LIST OF ICD10 CODES) and PDDCABG = 1
and TypeofCABG_PDDTemp = . then TypeofCABG_PDDTemp = 4;
run;
更新--
如果列表很小,我可以使用它...但是我有一个包含 8000 个唯一 ICD10 代码的列。所以我收到如下所示的错误消息。
proc sql;
select quote(icd10) into :cabgvalexcl separated by ','
from newlink.cabgvalexcl2019;
quit;
Data work.test1;
set WORK.cabgpddcol;
IF proc_p in (&cabgvalexcl.) and PDDCABG = 1 then CABGVAL_Excl = 1;
IF oproc1 in (&cabgvalexcl.) and PDDCABG = 1 then CABGVAL_Excl = 1 ;
IF oproc2 in (&cabgvalexcl.) and PDDCABG = 1 then CABGVAL_Excl = 1;
IF oproc3 in (&cabgvalexcl.) and PDDCABG = 1 then CABGVAL_Excl = 1 ;
IF oproc4 in (&cabgvalexcl.) and PDDCABG = 1 then CABGVAL_Excl = 1;
run;
**> ERROR message- ERROR: 宏变量值的长度
CABGVALEXCL (65540) 超过最大长度 (65534)。值有 到过 截断为 65534 个字符。**
更新—— 只有 1 列的示例(只有几行)(我没有多列。我在宏示例中这样做是因为宏变量已用完最大空间。)包含 ICD10 代码和我必须在其中标记行的数据文件具有任何 ICD10 代码 -
输出表- 逻辑 - 如果在表 CABGOTHERS1 中找到 cabgvalexcl2019 中列出的任何 ICD10 代码(此处以红色显示),则创建一个名为 - EXCLUDE 的列 - 并将该记录的值设置为 1。
【问题讨论】:
-
与其构建一个巨大的 ICD10 代码字符串,为什么不使用 PROC SQL 子查询呢?即“proc_p in (select distinct icd10 from icd10col) 和 PDDCABG....' 等情况。
-
为什么要使用宽格式数据集?这种格式在分析需求中很少有用。请改用长格式。
-
@Craig Srsen - 我没有重复。这些是医疗诊断代码,有 7000 个唯一代码。 @Parfait - 我不知道你的意思。请解释什么是宽格式和长格式。基本上,我有一个包含 1000 多个代码的文件,这些代码变化非常频繁。我希望能够在 if-then 语句中显示的搜索期间在此文件中读取多个列。谢谢
-
注意,不能用图片作为数据来写代码。请以文本形式发布示例数据。最好作为完全形成的数据步骤。
-
阅读此页面,这是对宏的介绍,将帮助您了解如何简化逻辑:stats.idre.ucla.edu/sas/seminars/sas-arrays
标签: arrays if-statement sas