Kody źródłowe/Tablica wartości krytycznych dla współczynnika korelacji rang Spearmana
Kod źródłowy w języku SAS 4GL, za pomocą którego została wygenerowana tabela wartości krytycznych.
%macro wartosci_krytyczne(n);
proc sql;
create table krytyczne_&n. as
select
&n. as n,
min(case when F>=0.9 then rho else . end) as F_10,
min(case when F>=0.95 then rho else . end) as F_05,
min(case when F>=0.975 then rho else . end) as F_025,
min(case when F>=0.99 then rho else . end) as F_01,
min(case when F>=0.995 then rho else . end) as F_005
from dystrybuanta_&n.;
quit;
%mend;
%macro test_permutacyjny(n);
data masa_&n.;
array x{0:&n.} _TEMPORARY_;
do i=0 to &n.;
x{i}=i;
end;
do while (1);
if 1
%do i=1 %to &n.;
%do j=1 %to &i.-1;
and x{&i.} ne x{&j.}
%end;
%end;
then do;
Sd=
%do i=1 %to &n.;
+(x{&i.}-&i.)*(x{&i.}-&i.)
%end;
;
rho=1-6*Sd/%eval(&n.*&n.*&n.-&n.);
keep rho;
output;
end;
do i=&n. to 0 by -1;
x{i}=x{i}+1;
if x{i}<=&n.
then leave;
else x{i}=1;
end;
if x{0}>0 then leave;
end;
run;
proc sort data=masa_&n.;
by rho;
run;
/*Liczona dystrybuanta lewostronna (z warunkiem < a nie <= )!*/
data dystrybuanta_&n.;
set masa_&n. nobs=silnia;
by rho;
retain F 0 n &n.;
if first.rho then output;
F=F+1/silnia;
keep n F rho;
run;
%wartosci_krytyczne(&n.);
%mend;
%macro test_Monte_Carlo(n);
%let iteracji=10000000;
data MC_&n.;
do k=1 to &iteracji.;
array rand{&n.} _TEMPORARY_;
array x{&n.} _TEMPORARY_;
%do i=1 %to &n.;
rand{&i.}=ranuni(28503458);
x{&i.}=&i.;
%end;
/*Sortowanie*/
do while(1);
zmiana=0;
%do i=2 %to &n.;
if rand{%eval(&i.-1)}>rand{&i.} then do;
pom=rand{%eval(&i.-1)};
rand{%eval(&i.-1)}=rand{&i.};
rand{&i.}=pom;
pom=x{%eval(&i.-1)};
x{%eval(&i.-1)}=x{&i.};
x{&i.}=pom;
zmiana=1;
end;
%end;
if not zmiana then leave;
end;
Sd=
%do i=1 %to &n.;
+(x{&i.}-&i.)*(x{&i.}-&i.)
%end;
;
rho=1-6*Sd/%eval(&n.*&n.*&n.-&n.);
keep rho;
output;
end;
run;
proc sql;
create table masa_&n. as
select rho, count(*)/&iteracji. as p
from MC_&n.
group by rho;
quit;
/*Liczona dystrybuanta lewostronna (z warunkiem < a nie <= )!*/
data dystrybuanta_&n.;
set masa_&n.;
retain F 0 n &n.;
output;
F=F+p;
keep n F rho;
run;
%wartosci_krytyczne(&n.);
%mend;
%macro obliczenia(minn,maxn);
%do n=&minn. %to 10;
%test_permutacyjny(&n.);
%end;
%do n=11 %to &maxn.;
%test_Monte_Carlo(&n.);
%end;
data krytyczne_razem;
set
%do n=&minn. %to &maxn.;
krytyczne_&n.
%end;
;
run;
data dystrybuanty_razem;
set
%do n=&minn. %to &maxn.;
dystrybuanta_&n.
%end;
;
run;
%mend;
%obliczenia(4,30);
%macro pisz(x);
if missing(&x.)
then put '| –';
else do;
x=floor(&x.*10000)/10000;
put '|' x;
end;
%mend;
data _null_;
set krytyczne_razem;
put '|-';
put '!' n;
%pisz(F_10);
%pisz(F_05);
%pisz(F_025);
%pisz(F_01);
%pisz(F_005);
run;
Ten tekst nie podlega pod prawa autorskie. Jest zatem własnością publiczną, ponieważ jego autor udostępnił go na licencji public domain.