? ? ? ? ?一般人都會用sas算q1和q3格嗅,但很少有人知道sas在后臺是怎么算的。如果你到網(wǎng)上查尋q1和q3的算法,會發(fā)現(xiàn)sas的結(jié)果和手算的完全不一樣妓柜。因為sas程序是封閉的,所以我沒有查到具體算法涯穷,于是通過程序生成從1-1到1-1000的數(shù)據(jù)產(chǎn)生1000個q1和q3棍掐,再通過找規(guī)律的方法,逆推得到了sas的算法(逆推得到的算法最后說)拷况。
? ? ? ?我們計算q1和q3的sas程序是這段:proc univariate data=aaa;var a;run;
? ? ? ?為了快速生成1000個q1和q3作煌,需要用以下程序:
data _null_;
do i=1 to 1000;
call execute('
data aaa;
do a=1 to '||cats(i)||';
output;
end;
run;
proc univariate data=aaa noprint;
var a;
output out=data'||put(i,z4.)||' q1=q1 q2=q2 q3=q3;
run;
');
end;
run;
data all;
set data:;
if int(q2)=q2 and mod(int(q2),2)=1 then qm_1=(q2+1)/2;*中位數(shù)為奇數(shù),中位數(shù)算進去所以+1除2得第二個中位數(shù);
else if int(q2)=q2 then qm_1=(q2)/2;*中位數(shù)為偶數(shù)赚瘦,中位數(shù)不算進去所以先-1得下半部數(shù)字個數(shù)粟誓,然后+1除2得第二個中位數(shù);
else qm_1=(int(q2)+1)/2;*中位數(shù)為小數(shù),中位數(shù)不算進去所以先取整得下半部數(shù)字個數(shù)起意,然后+1除2得第二個中位數(shù);
if int(q2)=q2 and mod(int(q2),2)=1 then qm_3=q2-1+qm_1;*中位數(shù)為奇數(shù)鹰服,中位數(shù)算進去所以-1退歸0位,然后加Q1;
else if int(q2)=q2 then qm_3=q2+qm_1;*中位數(shù)為偶數(shù),中位數(shù)不算進去悲酷,因此中位數(shù)處于0位套菜,直接加Q1;
else qm_3=int(q2)+qm_1;*中位數(shù)為小數(shù),中位數(shù)不算進去设易,因此中位數(shù)取整退歸0位逗柴,加Q1;
q_3=qm_3=q3;
q_1=qm_1=q1;
run;
proc print;run;
? ? ? ? ? ?通過q_3和q_1,我們可以判斷生成結(jié)果是否與univariate的結(jié)果相同亡嫌。根據(jù)生成的記過逆向推導嚎于,q1和q3的計算方法如下:
1、當整體數(shù)據(jù)中位數(shù)的秩次為奇數(shù)時:先求完整體的中位數(shù)挟冠,然后繼續(xù)對上下兩部分數(shù)據(jù)再各自求中位數(shù)于购,上下兩部分數(shù)據(jù)均要包含整體中位數(shù)本身。此時這兩個中位數(shù)依然是各自數(shù)據(jù)的一部分知染,都不需要通過平均數(shù)來計算肋僧。這兩個中位數(shù)就是q1和q3。
舉例來說:1控淡,3嫌吠,8,13掺炭,24辫诅,34,42涧狮,58炕矮,67
中位數(shù)為24,他的秩次是5為奇數(shù)者冤。故對上下兩部分分別求中位數(shù)肤视。
上半部(此時包含中位數(shù)24):1,3涉枫,8邢滑,13,24
下半部(此時包含中位數(shù)24):24愿汰,34困后,42,58尼桶,67
再次計算中位數(shù)可得操灿,Q1=8,Q3=42
2泵督、當整體數(shù)據(jù)中位數(shù)的秩次為偶數(shù)或者為小數(shù)時:計算和前面相同趾盐,唯一的區(qū)別是再次計算時要排除中位數(shù)。
舉例來說:1,3救鲤,8久窟,13,24本缠,34斥扛,42
中位數(shù)為13,他的秩次是4為偶數(shù)丹锹。故對上下兩部分分別求中位數(shù)稀颁。
上半部(此時排除中位數(shù)24):1,3楣黍,8
下半部(此時排除中位數(shù)24):24匾灶,34,42
再次計算中位數(shù)可得租漂,Q1=3阶女,Q3=34
接下來再舉一個中位數(shù)的秩次為小數(shù)的例子:1,3哩治,8秃踩,13,24业筏,34憔杨,42,58
中位數(shù)為13和24的均值18.5蒜胖,他的秩次是4.5為小數(shù)芍秆。故對上下兩部分分別求中位數(shù)。
上半部(此時排除中位數(shù)24):1翠勉,3,8霉颠,13
下半部(此時排除中位數(shù)24):24对碌,34,42 蒿偎,58
再次計算中位數(shù)可得朽们,Q1=5.5,Q3=38