使用SAS中的条件计算变量

时间:2016-10-26 12:55:39

标签: count sas conditional-statements

我有以下数据集。我想为每个学生创建一个Flag(得分> 50)列,以获得标记大于50的主题数。 我知道一种方法是通过为每个主题使用if条件创建一个标志,然后添加它们但只是好奇是否有更好的方法在SAS中这样做?谢谢!

Student_ID,Physics,Maths,Social,English,Chemistry,Flag(Score>50)
1011,90,90,60,30,20,3
1012,60,90,30,40,40,2
1013,30,10,80,70,50,2
1014,70,10,40,90,90,3

data score1;
set score;
if Physics > 50 then Phy_flag = 1;
if Maths > 50 then Math_flag=1;
if Social > 50 then Social_flag=1;
if English > 50 then Eng_flag=1;
if Chemistry > 50 then Chem_flag=1;
Flag_Score_50 = sum(Phy_flag,Math_flag,Social_flag,Eng_flag,Chem_flag);
run;

这就是我所做的,但我在其他数据集中有太多变量,如果条件这么多次,我不想写这些变量。 tx

2 个答案:

答案 0 :(得分:1)

使用数组来保存不同主题的分数,然后循环遍历数组,计算值> 50。

data score1;
set score;
array subj[5] Physics Maths Social English Chemistry;

Flag_Score_50 = 0;
do i=1 to 5;
   if subj[i] > 50 then
      Flag_Score_50 = Flag_Score_50 + 1;
end;
drop i;
run;

答案 1 :(得分:0)

直接使用sum:

data have;
infile cards dlm=',';
input Student_ID Physics Maths Social English Chemistry;
flag=sum(Physics > 50,Maths > 50, Social > 50,English > 50,Chemistry > 50);
cards;
1011,90,90,60,30,20
1012,60,90,30,40,40
1013,30,10,80,70,50
1014,70,10,40,90,90
;
proc print;
run;