hello,
I use proc univariate and i generate output files (quantiles and mean).
proc univariate data=bb.mdist;
var X;
by rank_no;
ods output Quantiles=quantiles;
run;
The file quantiles is like :
Rank_NO | VarName | Quantile | Estimate |
1 | X | 100% Max | 2,04178 |
1 | X | 99% | 1,855866 |
1 | X | 95% | 1,601379 |
1 | X | 90% | 1,455169 |
1 | X | 75% Q3 | 1,24162 |
1 | X | 50% Median | 0,976555 |
1 | X | 25% Q1 | 0,75844 |
1 | X | 10% | 0,549392 |
1 | X | 5% | 0,47554 |
1 | X | 1% | 0,132898 |
1 | X | 0% Min | -0,02425 |
2 | X | 100% Max | 2,311919 |
2 | X | 99% | 1,72241 |
2 | X | 95% | 1,504458 |
2 | X | 90% | 1,361372 |
2 | X | 75% Q3 | 1,176674 |
2 | X | 50% Median | 0,986445 |
2 | X | 25% Q1 | 0,804874 |
2 | X | 10% | 0,65509 |
2 | X | 5% | 0,558072 |
2 | X | 1% | 0,244873 |
2 | X | 0% Min | -0,21428 |
Then, I want to perform the mean quantile by quantile so I obtain a table like this
VarName | Quantile | Estimate |
X | 100% Max | |
X | 99% | |
X | 95% | |
X | 90% | |
X | 75% Q3 | |
X | 50% Median | |
X | 25% Q1 | |
X | 10% | |
X | 5% | |
X | 1% | |
X | 0% Min |
Do you want to run the results through a proc means to get the average max for example or do you want to have the results for the full dataset, i.e. not by Rank_no, which would mean running proc univariate once more without by statement?
Yes I want to have the average of each quantile. Like the value of max for all rank_no. the problem here is that how i can apply proc means?
Using the quantiles output?
Proc means data=quantiles;
class quantile;
var estimate;
output out=want mean=estimate;
run;
when I run your program I obtain
Quantile | _TYPE_ | _FREQ_ | estimate |
0 | 30646 | 1,023439 | |
0% Min | 1 | 2786 | 0,084684 |
1% | 1 | 2786 | 0,26137 |
10% | 1 | 2786 | 0,612162 |
100% Max | 1 | 2786 | 2,064825 |
25% Q1 | 1 | 2786 | 0,791249 |
5% | 1 | 2786 | 0,500818 |
50% Median | 1 | 2786 | 0,983584 |
75% Q3 | 1 | 2786 | 1,18967 |
90% | 1 | 2786 | 1,403732 |
95% | 1 | 2786 | 1,537687 |
99% | 1 | 2786 | 1,828053 |
Why the percentiles are not ordred. and What is the first line means
Quantile looks to be a text variable so its sorted alphabetically.
The first line is the average of all the values, note _TYPE_=0
You can get numeric quantiles by manually calculating the percentiles in proc univariate using pctpts, though you may need to transpose the results then.
proc univariate data=bb.mdist;
var X;
by rank_no;
ods output pctlpts=0 to 100 by 5 pctlpre=P_;
run;
i got this error
2816 proc univariate data=bb.mdist;
2817 var m_max_mret;
2818 by rank_no;
2819 ods output pctlpts=0 to 100 by 5 pctlpre=P_;
-
22
76
ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string.
ERROR 76-322: Syntax error, statement will be ignored.
2820 run;
my bad, that should be output out=DATASET.
You can explicitly list your percentiles if you want exactly the percentiles from the quantiles table.
proc univariate data=bb.mdist;
var X;
by rank_no;
output out=want pctlpts=0 to 100 by 5 pctlpre=P_;
run;
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.