2016-10-26 4 views
1

Ich habe den folgenden Datensatz. Ich möchte für jeden Schüler eine Flagge (Score> 50) Spalte erstellen, um die Anzahl der Fächer mit Markierungen größer als 50 zu erhalten. Ich weiß einen Weg, dies zu tun, indem ich ein Flag mit einer if-Bedingung für jedes Thema erstellen und sie dann aber hinzufügen nur neugierig, ob es eine bessere Möglichkeit gibt, das in SAS zu tun? Vielen Dank!! DieseZählen nach Variablen mit Kriterien in 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; 

ist das, was ich getan habe, aber ich habe zu viele Variablen in anderen Daten-Set und ich möchte nicht, diese, wenn die Bedingungen so viele Male schreiben.

tx

Antwort

1

ein Array verwenden, die Noten von den verschiedenen Fächern zu halten, dann nur eine Schleife über das Array, das Zählen der Werte> 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; 
0

Directly 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; 
Verwandte Themen