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