1536 8

求助大神帮忙看一看下面的模拟用SAS怎么写? [推广有奖]

  • 0关注
  • 4粉丝

已卖:23份资源

教授

12%

还不是VIP/贵宾

-

威望
0
论坛币
6762 个
通用积分
19.5160
学术水平
18 点
热心指数
24 点
信用等级
15 点
经验
383 点
帖子
1182
精华
0
在线时间
997 小时
注册时间
2013-1-20
最后登录
2024-8-2

楼主
小宝爱波1314 发表于 2014-3-30 19:33:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

我有一个birth_data的数据集。里面的变量包括patient和age,一共有N个观测。现在我想要通过SAS产生一些模拟数据集。要求如下:

1)我有一个数据集outlier,从outlier里面抽取x%*N条数据。

2) 在birth_data随机抽取x%*N条数据,这些数据将被上一步中产生的模拟数据代替。随机抽取的次数为1000次,相应地,替代的次数也为一千次。这样可以得到1000个被抽取和替代后的birth_data的模拟数据集。

3)  得到的1000个模拟数据集以后,分别计算出这些模拟数据集中age的均值和方差,并且将这些均值和方差合并入格式如下的数据集中。

  

Simulation degree

  

Simulation dataset order

mean

std

0.1

1

…..

……

0.1

2

…….

…….

0.1

3

……..

…….

0.1

….

…..

……

0.1

1000

……

…….


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:求助大神 Simulation ulation outlier Patient

沙发
hkhl237 发表于 2014-3-31 14:58:39
data a1;
        set sashelp.class(obs=16);
        keep name age;
run;

data a2;
        set sashelp.class(obs=8);
        keep name age;
run;


%macro survey(indata1=,indata2=,id=,seed=,rate1=,rate2=,re=);

data birth_data1;
        set &indata2.;
run;
data mean;
        format order mean std 8.;
        delete;
run;

%do i=1 %to &re.;
proc sort data=&indata1. ;by &id.;run;
proc surveyselect data=&indata1.
                                        method=srs
                                        rate=&rate1.
                                        seed=&seed.
                                        out=sample1
                                        outall;
run;


proc sort data=birth_data1;by &id.; run;
proc surveyselect data=birth_data1
                                        method=srs
                                        rate=&rate2.
                                        seed=&seed.
                                        out=sample2
                                        outall;
run;

data birth_data1;
        set sample1(where=(Selected=1))
                sample2(where=(Selected=0));
        drop selected;
run;

proc means data=birth_data1 noprint;
output out=aa n=n mean=mean std=std;
run;

data mean ;
        set mean
                aa(in=a);
        if a then order=&i.;
        keep order mean std;
run;

%end;
%mend;
%survey(indata1=a1,indata2=a2,seed=20140324,id=name,rate1=0.25,rate2=0.5,re=1000);

藤椅
小宝爱波1314 发表于 2014-3-31 15:51:14
hkhl237 发表于 2014-3-31 14:58
data a1;
        set sashelp.class(obs=16);
        keep name age;
你好,我刚才调试了一下,你这个程序是按照id或者那么来进行替换的,相同的name或者·id彼此替换数据,并不是从outlier里面抽取一部分数据来替换birth里面的数据。情况是这样的,假设一下,outlier里面有100000条数据,都是birth_data的模拟值。从里面随机抽取n条(占birth_data的数据rate),来替代birth_data的真实值,这样的随机过程要实现1000,最后得到的数据集要求保留rate,每次替代的number(第一次替代为1,第二次替代为2.。。。。),替代后的均值和标准差。我会一个一个替代,但是写出循环比较难

板凳
hkhl237 发表于 2014-4-1 09:33:59
程序中是分别从第一、二个数据集内,用简单随机的方法抽取25%(4个)和50%(4个)的数,然后用从第一个数据集内抽出的替代第二个数据集内抽出的数据,再计算均值和标准差。在第一个proc surveyselect内,因为每次的数据集排列顺序和seed都没有变,所以每次随机抽出的数据是相同的,想要改变这个只要每次循环改个seed就行。程序只是给你提供一个思路

报纸
小宝爱波1314 发表于 2014-4-1 14:27:15
hkhl237 发表于 2014-4-1 09:33
程序中是分别从第一、二个数据集内,用简单随机的方法抽取25%(4个)和50%(4个)的数,然后用从第一个数据 ...
但是是这样的,每个循环我要执行1000次,如果每次都改seed的话,这样写出来的循环也就没有意义了呀

地板
hkhl237 发表于 2014-4-1 15:44:04
seed=%eval(&seed.+&i.)

7
小宝爱波1314 发表于 2014-4-1 15:49:15
hkhl237 发表于 2014-4-1 15:44
seed=%eval(&seed.+&i.)
噢!!!谢谢您,我一直对于宏程序的应用不擅长,这个指点太到位了

8
小宝爱波1314 发表于 2014-4-2 09:26:46
hkhl237 发表于 2014-4-1 09:33
程序中是分别从第一、二个数据集内,用简单随机的方法抽取25%(4个)和50%(4个)的数,然后用从第一个数据 ...
您好,我想您误解我的意思了,我是想从数据集1里面随机抽取比如4个数据,替代数据集2里面随机抽取出来的四个数,替代完毕后,计算数据集2的均值和标准差,应该还有一个替代数据集2的4个数据之后,与数据集2剩下的那些数合并的过程呀?

9
hkhl237 发表于 2014-4-3 13:43:13
data birth_data1;
        set sample1(where=(Selected=1))
                sample2(where=(Selected=0));
        drop selected;
run
这一步就是替代和合并,你可实际运行下程序,打开数据集查看下

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-31 12:34