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;
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.