I have a set of data where I am doing a Tukey's test. I woud like to change the order of how it showing in my graphs, placing first ,<12, 12, 13-15, 16 and >16. Any tip of how I can change this?
ods graphics on;
proc glm data = incomes plots =diagnostics;
class Educ;
model Income2005=Educ ;
lsmeans Educ/stderr pdiff=all adjust=tukey;
run;
Sort your data by Educ and use Order=Data in the PROC GLM Statement like this
proc sort data=sashelp.iris out=test1;
by descending Species;
run;
proc glm data=test1 plots=diagnostics order=data;
class Species;
model SepalLength=Species;
lsmeans Species / stderr pdiff=all adjust=tukey;
run;quit;
proc sort data=sashelp.iris out=test2;
by Species;
run;
proc glm data=test2 plots=diagnostics order=data;
class Species;
model SepalLength=Species;
lsmeans Species / stderr pdiff=all adjust=tukey;
run;quit;
Plot from first GLM:
Plot from second GLM:
I am having troubles to sort the data with symbols.. I am pretty new using SAS, when is numbers or alphabetic order not problem but now I have symbols and numbers <12, >16 how I can short the data that comes in the order <12, 12, 13-15, 16, >16?
Thank you very much!
There are several ways to do this, but here is a format approach to get the sort right:
data test;
input educ $;
datalines;
<12
12
13-15
<12
12
13-15
16
>16?
16
<12
12
13-15
16
>16?
>16?
;
proc format;
value $ fmt
'<12' = 1
'12' = 2
'13-15' = 3
'16' = 4
'>16?' = 5
;
run;
proc sql;
create table sorted as
select * from test
order by put(educ, $fmt.);
quit;
Result:
educ <12 <12 <12 12 12 12 13-15 13-15 13-15 16 16 16 >16? >16? >16?
Hello @AnaVelloso,
Maybe it's even easier and you just need to specify order=internal in the PROC GLM statement. This would be sufficient if '<12' etc. were just formatted values of variable Educ, whose internal values (e.g., numeric values 1, 2, ...) reflected the desired sort order. (This is a common technique to avoid exactly these sorting issues.) Can you check in PROC CONTENTS output if Educ is numeric or character and whether a format is associated with it?
If, however, Educ is an unformatted character variable with values '<12' etc. you can create a view before the PROC GLM step and use this instead of another dataset:
proc sql;
create view _incomes as
select * from incomes
order by whichc(educ,'<12','12','13-15','16','>16');
quit;
ods graphics on;
proc glm data = _incomes plots=diagnostics order=data;
...
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.