首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果条件与另一个变量匹配,SAS -Making一个新变量?

如果条件与另一个变量匹配,SAS -Making一个新变量?
EN

Stack Overflow用户
提问于 2015-02-20 08:18:12
回答 1查看 115关注 0票数 0

我想在我的数据集中创建一个新的变量。这个变量只是一个二元变量,如果有人有烟草病或没有。我正在查看患者数据,每个患者最多有9个疾病代码。我有一个名为烟草的数据集,它存储了所有的烟草疾病代码。

这就是我认为我可以做的:

代码语言:javascript
复制
data outpreg;
set outpreg;
if diag1 = tobacco OR diag2 = tobacco OR diag3 = tobacco or diag4 = tobacco or diag5 = tobacco or diag6 = tobacco or 
diag7 = tobacco or diag8 = tobacco or diag9 = tobacco then co2=1;
run;

但这给了我太多的东西,让我觉得它是不正确的。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-02-20 11:24:39

它不是在做你想做的事情。您当前的代码正在尝试将diag1的值与同一outpreg数据集中名为tobacco的变量进行比较。由于没有变量tobacco,因此SAS创建了一个新的变量tobacco并将其初始化为missing .。为了执行您想要的操作,我将为每个diag变量将outpreg数据集连接到tobacco数据集。

代码语言:javascript
复制
proc sql;
select
  o.*,
  t1.tobacco_cd is not null or
  t2.tobacco_cd is not null or
  t3.tobacco_cd is not null as co2
from
  outpreg as o
  left join tobacco as t1
  on o.diag1 = t1.tobacco_cd
  left join tobacco as t2
  on o.diag2 = t2.tobacco_cd
  left join tobacco as t3
  on o.diag3 = t3.tobacco_cd
;
quit;

这将根据代码列表检查每个diag变量,如果匹配,则将co2设置为1,如果不匹配,则设置为0。例如,如果diag1匹配,则t1.tobacco_cd is not null将为true,整个表达式的计算结果为1

您必须将其扩展为涵盖所有9个变量,而不是仅包含3个变量。

另一种选择是将您的烟草代码放入一种格式,就像乔在这个question中建议的那样。

代码语言:javascript
复制
proc format;
  value $tobaccocd
   '30300','30301','30302','30303'= 'Tobacco'
    other='Not Tobacco';
quit;

然后,您可以在数据步骤中创建co2变量,如下所示:

代码语言:javascript
复制
data outpreg2;
  set outpreg;
  if put(diag1,$tobaccocd.) = 'Tobacco' or
     put(diag2,$tobaccocd.) = 'Tobacco' or
     put(diag3,$tobaccocd.) = 'Tobacco' then co2 = 1;
  else co2 = 0;
run;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28619566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档