Hello, I'm trying to find a way to swap the place of the two mean groups, Males and Females, in my data set so that when I run a proc ttest on the data set males are displayed first and then females so then my confidence interval for the difference between two means is (Males - Females) and not (Females - Males). I've tried sorting by sex and class sex too, but I cannot get the Male group to come first in the output table.
Another option if you can't get an ORDER=Data to work is to assign a format that changes the order and use Order=Formatted
proc format; value $mysex 'Male'=' Male' 'Female'='Female' ; run; proc ttest data=sashelp.heart alpha=0.05 order=Formatted; class sex; format sex $mysex.; var weight; run;
A side effect of most of the ODS output is that the space in front of the M that makes " M" come before "F" alphabetically is that the space is justified out of appearance.
Since T-test class variables should only have two levels it usually isn't that hard to come up with a format quickly.
It may be of interest that you can create the two groups for Ttest from a continuous or multivalued categorical variable by using a format.
proc format; value tage low-14='14 and younger' 15-high= 'Over 14'; run; proc ttest data=sashelp.class alpha=0.05 order=Formatted; class age; format age tage.; var weight; run;
This can be very useful if you need a "this value" compared to "all the other values" of a category and pretty easy to code
proc format; value oage 14='14' other= 'Not 14'; run; proc ttest data=sashelp.class alpha=0.05 order=Formatted; class age; format age oage.; var weight; run;
The current code I've been trying is:
Data Example.heart; set sashelp.heart;
proc ttest data=example.heart alpha=0.05 order=data;
class sex;
var weight;
run;
Another option if you can't get an ORDER=Data to work is to assign a format that changes the order and use Order=Formatted
proc format; value $mysex 'Male'=' Male' 'Female'='Female' ; run; proc ttest data=sashelp.heart alpha=0.05 order=Formatted; class sex; format sex $mysex.; var weight; run;
A side effect of most of the ODS output is that the space in front of the M that makes " M" come before "F" alphabetically is that the space is justified out of appearance.
Since T-test class variables should only have two levels it usually isn't that hard to come up with a format quickly.
It may be of interest that you can create the two groups for Ttest from a continuous or multivalued categorical variable by using a format.
proc format; value tage low-14='14 and younger' 15-high= 'Over 14'; run; proc ttest data=sashelp.class alpha=0.05 order=Formatted; class age; format age tage.; var weight; run;
This can be very useful if you need a "this value" compared to "all the other values" of a category and pretty easy to code
proc format; value oage 14='14' other= 'Not 14'; run; proc ttest data=sashelp.class alpha=0.05 order=Formatted; class age; format age oage.; var weight; run;
Hello @TDechamp and welcome to the SAS Support Communities!
Use the ORDER= option of the PROC TTEST statement.
Example:
proc ttest data=sashelp.class order=data;
class sex;
var height;
run;
The output displays males first because the first non-missing value of variable SEX in the dataset is 'M'. If that weren't the case, a PROC SORT step as shown below could create a suitably sorted input dataset for PROC TTEST:
proc sort data=sashelp.class out=want;
by descending sex;
run;
Note that in other datasets (perhaps in yours) variable SEX might be numeric with an associated format, e.g., 1=male, 2=female. In this case order=internal could be used without sorting.
Edit: In SASHELP.HEART, as shown in your second post, SEX is a character variable and 'Female' happens to occur first. So, use PROC SORT as above to get 'Male' values to the top in EXAMPLE.HEART.
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Ready to level-up your skills? Choose your own adventure.