楼主: daazx
3558 6

如何根据不同条件生成数据集? [推广有奖]

  • 0关注
  • 53粉丝

VIP

已卖:2份资源

教授

2%

还不是VIP/贵宾

-

TA的文库  其他...

Hadoop与大数据

威望
0
论坛币
50036 个
通用积分
7.1383
学术水平
176 点
热心指数
197 点
信用等级
114 点
经验
11000 点
帖子
445
精华
3
在线时间
1069 小时
注册时间
2007-10-19
最后登录
2021-6-1
毕业学校
深圳大学

楼主
daazx 在职认证  发表于 2012-11-28 15:24:09 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
是这样的,想要根据数据A的观测值数来生成新的数据集:
如果数据A的观测数小于等于20,那么就生成数据B,B=A;
如果数据A的观测数大于20,那么就生成数据C,C是从A中随机抽出20个数据。

请问如何实现?小弟跪谢了!
二维码

扫码加我 拉你入群

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

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

关键词:数据集 如何实现 观测值 如何

沙发
ziyenano 发表于 2012-11-28 15:50:40
%macro table;
%let disd=%sysfunc(open(A));
%let nobs=%sysfunc(attrn(&disd,nobs));
%if  &nobs<=20 %then %do;
data B;
set A;
run;
%end;
%else  %do;
proc  sql outobs=20;
create table c as
select * from a order by ranuni(0);
quit;
%end;
%mend;

%table
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
pobel + 3 + 3 + 3 Wonderful SQL!

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
pobel 在职认证  发表于 2012-11-28 16:01:29

%let ds=sashelp.company;
%let sampsize=20;

data _null_;
    length code $1000;
    *** decide the number of observations;
    if 0 then set &Ds nobs=obsnum;
   
        *** when less than or equal to 20;
        if obsnum<=20 then do
       code ="data c; set &ds; run;";
           call execute(code);
           stop;
        end;

        *** when more than 20;
        else do ;
     code="data d(drop=sampsize obsleft);
                      sampsize=&sampsize;
                        obsleft=totobs;
                        do while(sampsize>0);
                                pickit+1;"
           ||         "if ranuni(0)<sampsize/obsleft then do;
                                        set &ds point=pickit nobs=totobs;
                                        output;
                                        sampsize=sampsize-1;
                                end;
                                obsleft=obsleft-1;
                        end;
                        stop;
                run;";
           call execute(code);
           stop;
        end;
run;
和谐拯救危机

板凳
老师她摸我 发表于 2012-11-28 16:17:07
%macro test(dsn);
        proc sql noprint;
                select count(*) into: obsnum
                        from &dsn;
        quit;
        %if &obsnum le 20 %then %do;
                data test1;
                        set &dsn;
        run;
        %end;
        %else %do;
        proc surveyselect data=&dsn
                                        method=srs
                                        n=20
                                        out=test2;
        run;
        %end;
%mend test(dsn);
%test(rawdsn)

已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 12 + 1 + 1 + 1 热心帮助其他会员

总评分: 论坛币 + 12  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

欢迎加入SAS群:144839730-蜗牛

报纸
daazx 在职认证  发表于 2012-11-28 16:41:45
ziyenano 发表于 2012-11-28 15:50
%macro table;
%let disd=%sysfunc(open(A));
%let nobs=%sysfunc(attrn(&disd,nobs));
谢谢这位神!
我运行后为什么显示 “指定的查询涉及按其 SELECT 子句中没出现的一项排序。”呢?
是不是ranuni(0)的原因?
其他都可以,大神再看看,这种情况正常不?

地板
ziyenano 发表于 2012-11-28 17:13:19
daazx 发表于 2012-11-28 16:41
谢谢这位神!
我运行后为什么显示 “指定的查询涉及按其 SELECT 子句中没出现的一项排序。”呢?
是不是 ...
没什么影响,只不过随机数ranuni(0)没有在select中出现;
不放心可以改成这样
proc  sql outobs=20;
create table c as
select a.*,ranuni(0) as random from a  order by random;
quit;

7
myccc 发表于 2012-11-28 17:40:39
看到各位大虾的代码,有2个问题:
1. 取随机数, ranuni VS rannor
rannor从正态分布中取(-1,1)
ranuni从均分分布中取(0,1)
两者分别的应用场景是什么
2. 抽样ranuni VS proc surveyselect
区别,应用场景各是什么?

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

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