SAS中文论坛

标题: 请问如何随机选择某条件下的一半观测? [打印本页]

作者: shiyiming    时间: 2008-3-24 15:22
标题: 请问如何随机选择某条件下的一半观测?
我有一个panel data,涉及31个国家,12个行业。
我需要进行一个simulation。一开始把系数都设为1。之后我需要对每个国家和每个行业里的一半observation的系数1加一个向上的扰动项(scale up),而另一半则scale down,以避免多元共线性。

就是说,对国家1和行业1里面,比如有100个观测,我需要随机挑50个进行scale up,另外剩下的50个进行scale down。

请问如何实现?
谢谢。
作者: shiyiming    时间: 2008-3-26 04:10
标题: Re: 请问如何随机选择某条件下的一半观测?
Try this:

data sample100;
do i=1 to 100;
id =i;
var1 = rannor(2345);
var2 = ranuni(6353);
output;
end;
drop i;
run;

proc sql outobs=50;
create table sample50a as
select *
  from sample100
  order by ranuni(1234);
quit;

proc print data=sample50a; run;

proc sql;
create table sample50b as
select * from sample100
except
select * from sample50a;
quit;

proc print data=sample50b; run;

Hope this helps, good luck.

YZ
作者: shiyiming    时间: 2008-3-26 21:10
标题: Re: 请问如何随机选择某条件下的一半观测?
谢谢你啊。
不过我需要程序自动选择每个行业的obs的数量然后找一半的obs。所以有点复杂。
但是你的程序给我很大启发。谢谢。
作者: shiyiming    时间: 2008-3-27 09:20
标题: Re: 请问如何随机选择某条件下的一半观测?
用PROC SURVEYSELECT过程,其中有分层随机抽样的选择,并且随意可以限制样本大小比例。详细请参见SAS HELP。
以前也有帖子讲这个的,你可以搜一下。
作者: shiyiming    时间: 2008-3-27 19:00
标题: Re: 请问如何随机选择某条件下的一半观测?
[code:2cortlrx]data a;
do i=1 to 100;
output;
end;
run;

data up down;
retain k 50 n 100;
set a;
if ranuni(_n_)<=k/n then do;
output up;
k=k-1;
end;
else output down;
n=n-1;
drop k n;
run;[/code:2cortlrx]
作者: shiyiming    时间: 2008-3-27 21:42
标题: to waterlwh
Nice!!!




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2