I want a new variable that contains the number version of their grade. How can I can I do this with less code?
data students5 ;
set students4 ;
if results = 'A' then resultsNum = 4 ;
if results = 'B' then resultsNum = 3 ;
if results = 'C' then resultsNum = 2 ;
if results = 'D' then resultsNum = 1 ;
if results = 'F' then resultsNum = 0 ;
run;
You certainly should use ELSE as well.
As an alternative: Create a format and then use this format on your variable result.
resultsnum=indexc('FDCBA',results)-1;
if resultsnum<0 then resultsnum=.;
Unless you can shorten the code to a formula, as suggested by mkeintz, I would consider using a SELECT statement here:
data students5 ;
set students4 ;
select(results);
when('A') resultsNum = 4 ;
when('B') resultsNum = 3 ;
when('C') resultsNum = 2 ;
when('D') resultsNum = 1 ;
when('F') resultsNum = 0 ;
otherwise;
end;
run;Or you could use an informat:
proc format;
invalue graden
'A'=4
'B'=3
'C'=2
'D'=1
'F'=0
other=.;
run;
data students5;
set students4;
resultsNum=input(results,graden.);
run;
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.