楼主: playmore
3985 26

[问答] 请问如何在data步中选择性的output新的dataset [推广有奖]

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16309 个
通用积分
7.1397
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1331 小时
注册时间
2007-1-11
最后登录
2023-12-15

初级学术勋章 初级热心勋章 中级热心勋章

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我的问题如下

data have;
input id $ num;
datalines;
a 1
a 2
c 1
c 2
;
run;

data want_a want_b want_c;
set have;
if id EQ 'a' then output want_a;
else if id EQ 'b' then output want_b;
else if id EQ 'c' then output want_c;
run;

在上面第二个data步中,如果没有符合条件的观测,如id为b的情形,我就不想最后生成该数据集
请问该如何做到?谢谢!

二维码

扫码加我 拉你入群

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

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

关键词:dataset output DataS outpu data步 选择性 如何

本帖被以下文库推荐

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛
沙发
webgu 发表于 2013-8-15 15:18:14 |只看作者 |坛友微信交流群
  1. data have;
  2. input id $ num;
  3. datalines;
  4. a 1
  5. a 2
  6. c 1
  7. c 2
  8. ;
  9. run;


  10. proc sql;
  11. create table tmp as
  12. select distinct id
  13. from have;
  14. quit;

  15. data _null_;
  16.   set tmp;
  17. call execute(" data want_"||id||"; set have; if id='"||id||"' then  output want_"||id||"; run;");
  18. run;
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 观点有启发
playmore + 1 + 1 + 1 观点有启发

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

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

藤椅
henryyhl 发表于 2013-8-15 15:26:00 |只看作者 |坛友微信交流群
CALL EXCECUTE好厉害啊。学习。。
但是部分日志提示是这样的:
2   +  data want_a       ; set have; if id='a       ' then  output want_a       ; run;

NOTE: 有 4 个从数据集 WORK.HAVE 读取的观测。
NOTE: 数据集 WORK.WANT_A 有 2 个观测和 2 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.04 秒
      CPU 时间          0.04 秒


3   +  data want_c       ; set have; if id='c       ' then  output want_c       ; run;

NOTE: 有 4 个从数据集 WORK.HAVE 读取的观测。
NOTE: 数据集 WORK.WANT_C 有 2 个观测和 2 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.03 秒
      CPU 时间          0.03 秒


4   +  data want_c       ; set have; if id='c       ' then  output want_c       ; run;

NOTE: 有 4 个从数据集 WORK.HAVE 读取的观测。
NOTE: 数据集 WORK.WANT_C 有 2 个观测和 2 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.00 秒
      CPU 时间          0.00 秒

It's not going to be easy, but it is going to be worth it.

使用道具

板凳
playmore 发表于 2013-8-15 15:26:16 |只看作者 |坛友微信交流群
webgu 发表于 2013-8-15 15:18
好办法,mark下
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

报纸
webgu 发表于 2013-8-15 15:28:12 |只看作者 |坛友微信交流群
这个确实是个好问题,一开始想用宏解决,发现不是很好弄。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

地板
webgu 发表于 2013-8-15 16:27:17 |只看作者 |坛友微信交流群
henryyhl 发表于 2013-8-15 15:26
CALL EXCECUTE好厉害啊。学习。。
但是部分日志提示是这样的:
2   +  data want_a       ; set have; if ...
要先去重复。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

7
boe 发表于 2013-8-15 17:00:19 |只看作者 |坛友微信交流群
前面有个帖子,最佳答案还没出来,呵呵
Gorgeous girl , I love !

使用道具

8
boe 发表于 2013-8-15 17:05:21 |只看作者 |坛友微信交流群
qianmian youge tiezi, zuijia daan haimei chulai, hehe
haiyao shenhe
Gorgeous girl , I love !

使用道具

9
webgu 发表于 2013-8-15 18:21:45 |只看作者 |坛友微信交流群
boe 发表于 2013-8-15 17:05
qianmian youge tiezi, zuijia daan haimei chulai, hehe
haiyao shenhe
什么乱七八糟的。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

10
yongyitian 发表于 2013-8-16 09:08:58 |只看作者 |坛友微信交流群
3楼,7楼说的是不是要去掉 call execute 生成的语句中的空格

data _null_;
  set tmp;
call execute(" data want_"||compress(id)||"; set have; if id='"||compress(id)||"' then  output want_"||compress(id)||"; run;");
run;


compress_id.PNG
已有 1 人评分经验 论坛币 收起 理由
webgu + 60 + 60 热心帮助其他会员

总评分: 经验 + 60  论坛币 + 60   查看全部评分

使用道具

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

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

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

GMT+8, 2024-4-25 23:35