|
地板

楼主 |
发表于 2012-10-7 20:08:38
|
只看该作者
Re: IML数据模拟出现问题,请帮忙!
好久没有来过了,觉得这个问题比较有意思,也来自凑凑热闹。
[code:17j30u07]
%let n=500;
data IDX;
array A{5,&n} v1_1-v1_&n v2_1-v2_&n v3_1-v3_&n v4_1-v4_&n v5_1-v5_&n ;
array B{&n} B_1-B_&n ;
array T{100} T_1-T_100 ;
*1st;
do i=1 to 500;
A{1,i}=i;
B{i}=A{1,i};
end;
output;
*2nd;
do i=1 to 100;
T{i}=A{1, ceil(ranuni(0)*500)};
end;
do i=1 to 500;
A{2,i}=T{ceil(ranuni(0)*100)};
B{i}=A{2,i};
end;
output;
*3rd;
do i=1 to 500;
if i<=100 then A{3,i}=A{1, ceil(ranuni(0)*500)};
else A{3,i}=A{2, ceil(ranuni(0)*500)};
B{i}=A{3,i};
end;
output;
*4th;
do i=1 to 500;
if i<=100 then A{4,i}=A{1, ceil(ranuni(0)*500)};
if 100<i<=200 then A{4,i}=A{2, ceil(ranuni(0)*500)};
else A{4,i}=A{3, ceil(ranuni(0)*500)};
B{i}=A{4,i};
end;
output;
*5th;
do i=1 to 500;
if i<=100 then A{5,i}=A{1, ceil(ranuni(0)*500)};
if 100<i<=200 then A{5,i}=A{2, ceil(ranuni(0)*500)};
if 200<i<=300 then A{5,i}=A{3, ceil(ranuni(0)*500)};
else A{5,i}=A{4, ceil(ranuni(0)*500)};
B{i}=A{5,i};
end;
output;
*6th;
do j=6 to 50;
_t=IFN(mod(j,5)=0,5,mod(j,5)); /*since the range of A is 1:5, */
do i=1 to 500;
if i<=100 then B{i}=A{1, ceil(ranuni(0)*500)};
if 100<i<=200 then B{i}=A{2, ceil(ranuni(0)*500)};
if 200<i<=300 then B{i}=A{3, ceil(ranuni(0)*500)};
if 300<i<=400 then B{i}=A{4, ceil(ranuni(0)*500)};
else B{i}=A{5, ceil(ranuni(0)*500)};
end;
output;
do i=1 to 500;
A{_t,i}=B{i};
end;
end;
keep B_:;
run;
/* generate sample: variable income follows pareto distribution */
data sample;
do i=1 to 500;
y=ranuni(0);
Income=quantile('pareto', y, 1.2,1.5);
sex=round(ranuni(0));
drop i;
output;
end;
run;
%macro sample_j(in=in, sample=sample, j=1, out=out );
data &out;
array T{500} B_1-B_500;
set &in(firstobs=&j obs=&j) ;
do __i=1 to 500;
p=T{__i};
set &sample point=p;
output;
drop b_: __i p;
end;
stop;
run;
%mend;
%sample_j(in=IDX, j=2);
[/code:17j30u07] |
|