全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1471 8
2014-03-30

我有一个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

……

…….


二维码

扫码加我 拉你入群

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

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

全部回复
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);

二维码

扫码加我 拉你入群

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

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

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.。。。。),替代后的均值和标准差。我会一个一个替代,但是写出循环比较难
二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

2014-4-1 15:44:04
seed=%eval(&seed.+&i.)
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群