jingju11 发表于 2015-1-7 01:53
I use proc surveryselect as well. JingJu
京剧大神厉害,利用一次proc surveyselect过程,产生重复样本,避免了宏循环,把所有的数据都放在selectout里,然后通过条件设置set依次进去就行,其中最出彩之处在于这个reps用的特别好,不但囊括了产生缺失值变量的个数还包括了重复次数,一举两得,后面的data步也设置的非常精简。膜拜!!不过不太理解的是,为了在data步中要加一个if 1=0 then set &data;这么一个语句呢,这似乎是一个不执行的语句啊?
data test;
array x{10};
do n = 1 to 50;
do j = 1 to 10;
x[j] = ceil(ranuni(12345)*100);
end;
output;
end; drop j;
run;
data want;
array x{10} x1-x10;
array y{50, 10};
if _n_ = 1 then do;
p = 1;
do until (last);
set test end=last ;
do j = 1 to 10;
y[p, j] = x[j];
end;
p+1;
end;
do k = 1 to 10;
seed = k+1000;
nmiss = 0;
do until (nmiss=5);
n1 = ceil(ranuni(seed)*50);
if ^missing(y[n1, k]) then do;
call missing(y[n1, k]);
nmiss+1; end;
end;
end;
do n = 1 to 50;
do k1 = 1 to 10;
x[k1] =y[n, k1];
end;
output;
end;
end;
keep n x1-x10;
run;