楼主: just_blue
1639 2

[编程问题求助] 求达人帮忙,想模拟1000个结构如下的数据集,请问如何做循环 [推广有奖]

  • 0关注
  • 0粉丝

本科生

13%

还不是VIP/贵宾

-

威望
0
论坛币
67 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4338 点
帖子
14
精华
0
在线时间
143 小时
注册时间
2013-3-27
最后登录
2023-5-11

楼主
just_blue 发表于 2014-11-26 15:06:25 |AI写论文
50论坛币
求达人帮忙,想模拟1000个结构如下的数据集,请问如何做循环存成一个SAS数据集,万分感谢了!

set more off

clear

set memo 700m

set obs 20

generate school=_n

generate u_i=rnormal(0,0)

expand 10

bysort school:generateclassroom=_n

generate u_ij=rnormal(0,1.5)

expand 20

bysort schoolclassroom:generate child=_n

generate u_ijk=rnormal(0,1)

generate temprand=runiform()

egen mother_educ=cut(temprand),at(0,0.5,0.9,1)icodes

label define mother_educ0  "highschool"  1 "college"  2  ">college"

label values mother_educmother_educ

tabulate mother_educ,generate(meduc)

generatescore=7+0*meduc1+0.5*meduc2+1*meduc3+u_i+u_ij+u_ijk

drop  u_i u_ij u_ijk temprand meduc1 meduc2 meduc3

fdasave clindata

savasas using "H:", replace check


最佳答案

笑书神侠1 查看完整内容

楼主的问题我已用SAS帮你实现,程序如下: %Macro randomsurvey(n=,school=,classroom=,child=,bi=,bij=,bijk=,dataset=); options nonotes nosource; %do loop=1 %to &n.; data survey&loop.; length id $ 200; retain _seed_ &loop.; do school=1 to &school.; u_i=&bi*rannor(_seed_); do classroom=1 to &classroom.; u_ij=&bij*rannor(_seed_); do child=1 to &child.; u_ijk=&bijk*rannor(_seed_); co ...
关键词:数据集 Highschool Classroom Generates generate college generate school values 如何

沙发
笑书神侠1 发表于 2014-11-26 15:06:26
楼主的问题我已用SAS帮你实现,程序如下:
%Macro randomsurvey(n=,school=,classroom=,child=,bi=,bij=,bijk=,dataset=);
options nonotes nosource;
%do loop=1 %to &n.;
data  survey&loop.;
length id $ 200;
    retain _seed_ &loop.;
    do school=1 to &school.;
u_i=&bi*rannor(_seed_);
do classroom=1 to &classroom.;
u_ij=&bij*rannor(_seed_);
do child=1 to &child.;
u_ijk=&bijk*rannor(_seed_);
cova=0+(1-0)*ranuni(_seed_);

meduc1=0;
meduc2=0;
meduc3=0;
if 0<cova<0.5 then do; meduc1=1;mother_educ=0;end;
else if cova<0.8 then do; meduc2=1;mother_educ=1;end;
else do; meduc3=1; mother_educ=2;end;
score=7+0*meduc1+0.5*meduc2+1*meduc3+u_i+u_ij+u_ijk;

replicate=&loop.;
id=cats(_seed_,school,classroom,child);
class=input(cats(_seed_,school,classroom),best12.);
            output;
end;
end;
end;
/* keep id classroom school child score mother_educ replicate;*/
run;
%end;
data  &dataset.;
    set  survey: ;
run;
proc datasets lib=work nolist;delete survey:;run;quit;
%Mend;
已有 1 人评分论坛币 收起 理由
admin_kefu + 90 根据规定进行奖励

总评分: 论坛币 + 90   查看全部评分

藤椅
just_blue 发表于 2014-11-26 16:27:38
牛逼!!!!!!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-19 17:54