标题: 以下的程序怎么编程 [打印本页] 作者: shiyiming 时间: 2009-5-10 15:09 标题: 以下的程序怎么编程 以下的问题如何通过编程获得
一列数据的前k项均值和后n-k项均值的差值作者: shiyiming 时间: 2009-5-10 17:11 标题: Re: 以下的程序怎么编程 程序比较丑~~~不过能解决问题。。
[code]
proc sql noprint;
select mean(x) into :pre
from youdata(firstobs=1 obs=k)
;
select mean(x) into :post
from youdata(firstobs=k obs=n-k)
;
%put The difference = %sysevalf(&pre-&post);
quit;作者: shiyiming 时间: 2009-5-12 21:35 标题: Re: 以下的程序怎么编程 *create a dataset;
data tblTrial;
do i=1 to 20;
x=i;
if ^mod(x,5) then x=.;
output;
end;
drop i;
run;
proc print;run;
*get means and differences;
data tblTrial_1;
set tblTrial end=endof;
k=10;*assume k=10;
retain Ntot NnmissK NnmissK_N nSumK nSumK_N 0;
Ntot+1;
if ^missing(x) then do;*excluding missing values;
if Ntot<=k then do;
NnmissK+1;
nSumK=sum(x,nSumK);
end;
else do;*after k;
NnmissK_N+1;
nSumK_N=sum(x,nSumK_N);
end;
end;
if endof then do;
if NnmissK then nMeanK=nSumK/NnmissK;
else do;
nSumK=.;
nMeanK=.;
end;
if NnmissK_N then nMeanK_N=nSumK_N/NnmissK_N;
else do;
nSumK_N=.;
nMeanK_N=.;
end;
nDiff=nMeanK-nMeanK_N;
output;
end;
drop x;
run;
proc sql;
select distinct %CAL(A) as AA,%CAL(B) as BB
from ahuige;
;[/code:30d0mgl4]作者: shiyiming 时间: 2009-5-12 22:46 标题: Re: 以下的程序怎么编程 *very good, but not work for this dataset;
data ahuige;
input A B;
cards;
. 1
2 3
5 7
7 9
;run;
%let k=2;
%macro cal(VAL); sum((monotonic()<=&k)*&val)/sum(monotonic()<=&k)-sum((monotonic()>&k)*&val)/sum(monotonic()>&k)%mend;
proc sql;
select distinct %CAL(A) as AA,%CAL(B) as BB
from ahuige;
;作者: shiyiming 时间: 2009-5-12 23:21 标题: Re: 以下的程序怎么编程 [code:1wvui6py]%macro cal(VAL); sum((monotonic()<=&k)*&val)/sum((monotonic()<=&k)*(1-missing(&val)))
-sum((monotonic()> &k)*&val)/sum((monotonic()> &k)*(1-missing(&val)))%mend;
%let k=2;
data ex(keep=ma mb);
set ahuige nobs=n;
if &k. ge _N_ then
do;
aa1+A;bb1+B;
if missing(A) then missa1+1;
if missing(B) then missb1+1;
end;
else do;
aa2+A;bb2+B;
if missing(A) then missa2+1;
if missing(B) then missb2+1;
end;
if _N_=n then
do;
ma=aa1/(&k.-missa1)- aa2/(n-&k.-missb1);
mb=bb1/(&k.-missa2)- bb2/(n-&k.-missb2);
output;
end;
run;[/code:3que81hy]
proc sql ;
select mean(a), mean(b) into :ma1, :mb1 from ahuige where monotonic() le &k.;
select &ma1.-mean(a),&mb1.-mean(b) into :ma,:mb from ahuige where monotonic() gt &k.;
quit;[/code:3uuadprv]作者: shiyiming 时间: 2009-5-22 07:09 标题: Re: 以下的程序怎么编程 真的非常佩服楼上的各位大师!可以问问你们是怎么找出这么多种巧妙脱俗的方法地呢?你们可以进一步谈谈解决这个问题的思路及感想吗?莫非冥冥之中真有注定?
这里真是一个好地方!下次有问题一定跪求!