请选择 进入手机版 | 继续访问电脑版
楼主: huangrunping
3190 10

如何分组导出数据? [推广有奖]

  • 2关注
  • 0粉丝

小学生

64%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
58 点
帖子
8
精华
0
在线时间
5 小时
注册时间
2014-7-31
最后登录
2014-8-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现在有这样一个数据id               i
001          1
003          1  
005          2
006          2
007          3
008          3

我想把i为一样的分到一个组里,然后分别输出成3个数据集,我觉得是不是要用first.i的,但是我想不到要怎么用,求教高手!
二维码

扫码加我 拉你入群

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

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

关键词:First FIRS 数据集 IRS FIR 如何

回帖推荐

sas9.4 发表于9楼  查看完整内容

或者这么写也许更好; data raw; input a $ id ; cards; 001 1 003 1 005 2 006 2 007 3 008 3 ; run; proc sql noprint; select distinct id into: list separated by ' _' from raw; select COUNT(distinct id) into: N from raw; quit; %let list= _&list; %let N=&N; %put Datasets namelist: &list; %put Attention: will generate tota ...
learsaas 发表于 2014-8-2 13:21:37 |显示全部楼层 |坛友微信交流群
对first.i并且加call execute,就搞定

使用道具

learsaas 发表于 2014-8-2 13:21
对first.i并且加call execute,就搞定
不太明白啊,这个函数不是用来调用宏的?

使用道具

freerunning_sky 在职认证  发表于 2014-8-2 14:11:26 |显示全部楼层 |坛友微信交流群
data a1 a2 a3;
    set a;
    by i;
    retain index 0;
    if first.i then index=index+1;
    if index=1 then output a1;else
    if index=2 then output a2;else
    if index=3 then output a3;
run;

使用道具

learsaas 发表于 2014-8-2 14:24:53 |显示全部楼层 |坛友微信交流群
楼上的程序适用于i的值少量的。但是i的值一旦很多,很可能i/o吃不消。

使用道具

learsaas 发表于 2014-8-2 14:24
楼上的程序适用于i的值少量的。但是i的值一旦很多,很可能i/o吃不消。
求大侠给个程序!

使用道具

freerunning_sky 发表于 2014-8-2 14:11
data a1 a2 a3;
    set a;
    by i;
可以建一个数组做循环么?新手不懂

使用道具

sas9.4 发表于 2014-8-2 22:34:49 |显示全部楼层 |坛友微信交流群
用宏就可以了,批量化处理一下;

data raw;
input a $ id ;
cards;
001          1
003          1  
005          2
006          2
007          3
008          3
;
run;

proc sql noprint;
  select distinct id into:  list  separated by ' _' from raw;
  select  COUNT( distinct id) into:  N  from raw;
quit;
%let list= _&list;
%let N=&N;
%put &list;
%put &N;

%macro separate ;
%do i = 1 %to &N;
%put &i;
  data %scan(&list , &i , ' ');
  set raw;
  where id= %scan(&list , &i , ' _');
  run;
%end;
%mend;
%separate
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

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

使用道具

sas9.4 发表于 2014-8-2 23:04:56 |显示全部楼层 |坛友微信交流群
或者这么写也许更好;
data raw;
input a $ id ;
cards;
001          1
003          1  
005          2
006          2
007          3
008          3
;
run;

proc sql noprint;
  select distinct id into:  list  separated by ' _' from raw;
  select  COUNT(distinct id) into: N from raw;
quit;
%let list= _&list;
%let N=&N;
%put Datasets namelist: &list;
%put Attention: will generate totally &N datasets;

%macro separate ;
  data &list;
  set raw;
  %do i = 1 %to &N;
  if strip(put(id, best.)) = scan("&list" , &i , ' _') then output %scan(&list , &i , ' ');
  %end;
  run;
%mend;
%separate

使用道具

sas9.4 发表于 2014-8-2 23:04
或者这么写也许更好;
data raw;
input a $ id ;
大侠,可以问问你 select distinct id into:  list  separated by ' _' from raw;
  select  COUNT(distinct id) into: N from raw;
和 if strip(put(id, best.)) = scan("&list" , &i , ' _') then output %scan(&list , &i , ' ');这两句分别是什么意思么新手求教

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 09:53