【问题标题】:SAS - creating new dataset on specific variable values from old datasetSAS - 根据旧数据集的特定变量值创建新数据集
【发布时间】:2026-01-26 11:10:01
【问题描述】:

你好:

我有一个患者索赔数据集,并且想创建一组新的仅包含诊断为酒精使用的患者索赔的数据集。我已将这些酒精诊断代码放入一个新的数据集中,并尝试针对更大的一组患者声明运行它以创建新的。

下面是我一直在尝试的代码:

data alcohol;
  input code;
  datalines;
30300
30301
30302
30303
30390
30391
30392
30393
30501
30500
30502
30503
;

data alcohol;
  set alcohol;
  code1 = put(code, 5.);
  output;
run;

/*inpatient records with these codes*/
proc sql;
  create table alcin as
  select b.*
  from allpreg as b
  where 
    diag1 in (select code1 from alcohol) or 
    diag2 in (select code1 from alcohol) or 
    diag3 in (select code1 from alcohol) or 
    diag4 in (select code1 from alcohol) or 
    diag5 in (select code1 from alcohol) or 
    diag6 in (select code1 from alcohol) or 
    diag7 in (select code1 from alcohol) or 
    diag8 in (select code1 from alcohol) or 
    diag9 in (select code1 from alcohol);
quit;

有没有更好的方法来做到这一点,或者这行得通吗? 谢谢!

【问题讨论】:

  • 这个问题并不真正符合 * 的指导方针。请在此处阅读指南:*.com/help/dont-ask。但这并不意味着这不是一个好问题。就是不合适。
  • 转置和使用连接怎么样
  • @EricTaylor 该评论似乎没有多大帮助。您认为不符合准则的问题怎么办?什么可以改进这个问题?
  • @Joe “有没有更好的方法来做到这一点”和“这行得通吗?”在指导方针下是有问题的,原因有两个。第一个问题往往会产生主要根据意见进行交易的答案,第二个问题是“为什么我的代码不起作用?”的推论。 OP 不清楚为什么当前的“方式”在某些方面存在缺陷,或者为什么他认为可能有“更好”的方式。他也不清楚“有效”是什么意思。我的回答可能有点生硬。我很抱歉。
  • @EricTaylor 感谢您的澄清。当您发表诸如“这个问题不太适合”之类的评论时,最好提供可操作的建议,以便提问者将来可以改进!

标签: sas


【解决方案1】:

数据的一个问题是结构:将 9 个不同的诊断代码作为变量可能难以处理,因为您必须将比较写出 9 次,如果您添加了第 10 个诊断代码列,您就有再次更改所有代码。更好的结构将每个诊断有一行。 PROC TRANSPOSE 可以让你到达那里,或者数据步骤; linked question 就是一个很好的例子。如果您需要输出数据集上的所有九个代码,您仍然可以这样做(然后将结果表合并/连接到原始表以获得合格的行),或者您可能不希望更改结构。

但是,无论您的结构如何,您都有一个单独的问题;如何最好地组合两个表。毕竟,这就是你正在做的事情。您的方法是一种可接受的方法,尤其是当列表相对较短时;由于仅使用少量酒精代码运行子查询不会花费很长时间,因此这不是一个糟糕的解决方案。

在这种情况下,更好的解决方案是format。您可以将酒精代码列表转换为一种格式,然后可以与put 一起使用来评估一行是否符合条件。 (为简洁起见,我在下面包含了一部分代码,您可以编写完整的列表。)

proc format;
  value $alcoholdrg
   '30300','30301','30302','30303'= 'Alcohol'
    other='Not Alcohol';
quit;

那么你就可以轻松使用了:

proc sql;
  create table alcin as
  select   b.*
  from  allpreg as b
  where put(diag1,$ALCOHOLDRG.) = 'Alcohol';
quit;

(再次,为了简洁起见,我包括了一个诊断,您需要全部九个或重组您的数据以使其工作。)

鉴于您正在使用 ICD 代码,我会在网上四处寻找与使用它们相关的代码或文章;与子代码的工作方式相关的一些复杂性可能会使事情变得更加复杂,毫无疑问,在更专业的网站上可以轻松找到有关如何处理此类问题的建议。

【讨论】:

  • 非常感谢 - 我会试试这个!非常感谢您提供有用的反馈。