SAS 程序冷知識(shí)——Q1和Q3的計(jì)算原理

? ? ? ? ?一般人都會(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容