SAS

时间:2018-03-26 19:31:50

标签: arrays sas

我正在尝试使用Array Do循环来搜索8个变量。如果至少2个变量满足800-959之间的条件(不包括905-909,910-924和930-939),则认为观察具有多个创伤。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

下次,请在帖子中包含您已经尝试过的代码以及有关您的问题的更多详细信息。正如评论中所述,请查看有关如何正确发布问题的指南的链接。

由于这是你的第一篇帖子而且问题相对简单,我会给你解决方案。

这可以在简单的数据步骤中完成。由于我们只需要担心8个变量,所以我只为每个变量编写了一个if语句,以创建一个具有您指定条件的虚拟变量。如果8个虚拟变量加起来为2或更多,那么最后的虚拟变量risk_ind = 1

仔细检查if语句中的条件。我不确定我是否理解了你的问题。您可以轻松地根据自己的特定需求进行调整。

见下面的代码。

data trauma; input
row_num a   b   c   d   e   f   g   h; datalines;
1       800 100 600 550 820 950 930 55
2       700 960 999 300 230 100 805 120
3       200 200 200 200 200 200 200 200  
4       920 931 929 945 962 500 800 730  
run;

data multiple_trauma;
set trauma;

if (a >= 800 and a < 905) or (a > 924 and a < 930) or (a > 939 and a <959) then 
    a_dummy = 1;
    else a_dummy = 0;

if (b >= 800 and b < 905) or (b > 924 and b < 930) or (b > 939 and b <959) then 
    b_dummy = 1; 
    else b_dummy = 0;

if (c >= 800 and c < 905) or (c > 924 and c < 930) or (c > 939 and c <959) then 
    c_dummy = 1; 
    else c_dummy =  0;

if (d >= 800 and d < 905) or (d > 924 and d < 930) or (d > 939 and d <959) then 
    d_dummy = 1; 
    else d_dummy = 0;

if (e >= 800 and e < 905) or (e > 924 and e < 930) or (e > 939 and e <959) then 
    e_dummy = 1; 
    else e_dummy = 0;

if (f >= 800 and f < 905) or (f > 924 and f < 930) or (f > 939 and f <959) then 
    f_dummy = 1; 
    else f_dummy = 0;

if (g >= 800 and g < 905) or (g > 924 and g < 930) or (g > 939 and g <959) then 
    g_dummy = 1; 
    else g_dummy = 0;

if (h >= 800 and h < 905) or (h > 924 and h < 930) or (h > 939 and h <959) then 
    h_dummy = 1; 
    else h_dummy = 0;

total_risk_factors = a_dummy + b_dummy + c_dummy + d_dummy + e_dummy + f_dummy + g_dummy + h_dummy;

if total_risk_factors > 2 then risk_ind = 1;
   else risk_ind = 0;

run;

proc sql;
create table mulitple_trauma_ind as
select row_num, risk_ind 
from work.multiple_trauma;
quit;