? ? ? ? ?一般人都會(huì)用sas算q1和q3,但很少有人知道sas在后臺(tái)是怎么算的。如果你到網(wǎng)上查尋q1和q3的算法,會(huì)發(fā)現(xiàn)sas的結(jié)果和手算的完全不一樣。因?yàn)閟as程序是封閉的,所以我沒(méi)有查到具體算法,于是通過(guò)程序生成從1-1到1-1000的數(shù)據(jù)產(chǎn)生1000個(gè)q1和q3,再通過(guò)找規(guī)律的方法,逆推得到了sas的算法(逆推得到的算法最后說(shuō))。
? ? ? ?我們計(jì)算q1和q3的sas程序是這段:proc univariate data=aaa;var a;run;
? ? ? ?為了快速生成1000個(gè)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ù)算進(jìn)去所以+1除2得第二個(gè)中位數(shù);
else if int(q2)=q2 then qm_1=(q2)/2;*中位數(shù)為偶數(shù),中位數(shù)不算進(jìn)去所以先-1得下半部數(shù)字個(gè)數(shù),然后+1除2得第二個(gè)中位數(shù);
else qm_1=(int(q2)+1)/2;*中位數(shù)為小數(shù),中位數(shù)不算進(jìn)去所以先取整得下半部數(shù)字個(gè)數(shù),然后+1除2得第二個(gè)中位數(shù);
if int(q2)=q2 and mod(int(q2),2)=1 then qm_3=q2-1+qm_1;*中位數(shù)為奇數(shù),中位數(shù)算進(jìn)去所以-1退歸0位,然后加Q1;
else if int(q2)=q2 then qm_3=q2+qm_1;*中位數(shù)為偶數(shù),中位數(shù)不算進(jìn)去,因此中位數(shù)處于0位,直接加Q1;
else qm_3=int(q2)+qm_1;*中位數(shù)為小數(shù),中位數(shù)不算進(jìn)去,因此中位數(shù)取整退歸0位,加Q1;
q_3=qm_3=q3;
q_1=qm_1=q1;
run;
proc print;run;
? ? ? ? ? ?通過(guò)q_3和q_1,我們可以判斷生成結(jié)果是否與univariate的結(jié)果相同。根據(jù)生成的記過(guò)逆向推導(dǎo),q1和q3的計(jì)算方法如下:
1、當(dāng)整體數(shù)據(jù)中位數(shù)的秩次為奇數(shù)時(shí):先求完整體的中位數(shù),然后繼續(xù)對(duì)上下兩部分?jǐn)?shù)據(jù)再各自求中位數(shù),上下兩部分?jǐn)?shù)據(jù)均要包含整體中位數(shù)本身。此時(shí)這兩個(gè)中位數(shù)依然是各自數(shù)據(jù)的一部分,都不需要通過(guò)平均數(shù)來(lái)計(jì)算。這兩個(gè)中位數(shù)就是q1和q3。
舉例來(lái)說(shuō):1,3,8,13,24,34,42,58,67
中位數(shù)為24,他的秩次是5為奇數(shù)。故對(duì)上下兩部分分別求中位數(shù)。
上半部(此時(shí)包含中位數(shù)24):1,3,8,13,24
下半部(此時(shí)包含中位數(shù)24):24,34,42,58,67
再次計(jì)算中位數(shù)可得,Q1=8,Q3=42
2、當(dāng)整體數(shù)據(jù)中位數(shù)的秩次為偶數(shù)或者為小數(shù)時(shí):計(jì)算和前面相同,唯一的區(qū)別是再次計(jì)算時(shí)要排除中位數(shù)。
舉例來(lái)說(shuō):1,3,8,13,24,34,42
中位數(shù)為13,他的秩次是4為偶數(shù)。故對(duì)上下兩部分分別求中位數(shù)。
上半部(此時(shí)排除中位數(shù)24):1,3,8
下半部(此時(shí)排除中位數(shù)24):24,34,42
再次計(jì)算中位數(shù)可得,Q1=3,Q3=34
接下來(lái)再舉一個(gè)中位數(shù)的秩次為小數(shù)的例子:1,3,8,13,24,34,42,58
中位數(shù)為13和24的均值18.5,他的秩次是4.5為小數(shù)。故對(duì)上下兩部分分別求中位數(shù)。
上半部(此時(shí)排除中位數(shù)24):1,3,8,13
下半部(此時(shí)排除中位數(shù)24):24,34,42 ,58
再次計(jì)算中位數(shù)可得,Q1=5.5,Q3=38