楼主: wanwanle2
377 6

[问答] merge数据集,遇到了空数据集 [推广有奖]

  • 1关注
  • 21粉丝

博士生

74%

还不是VIP/贵宾

-

威望
0
论坛币
453 个
学术水平
15 点
热心指数
18 点
信用等级
14 点
经验
283104 点
帖子
302
精华
0
在线时间
334 小时
注册时间
2011-4-13
最后登录
2018-7-4

wanwanle2 在职认证  发表于 2018-1-4 10:36:33 |显示全部楼层
需要merge四十多个数据集,数据集比较规范,Y1,Y2---Y50.,其中 2,4,6,10是空的数据集。如果来跳过这些空的数据集来横向合并。data y;
merge y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11;
by date;
run;


1326  data y;
1327  merge y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11;
1328  by date;
1329  run;

ERROR: BY 变量 date 不在输入数据集 WORK.Y2 中。
ERROR: BY 变量 date 不在输入数据集 WORK.Y4 中。
ERROR: BY 变量 date 不在输入数据集 WORK.Y6 中。
ERROR: BY 变量 date 不在输入数据集 WORK.Y10 中。
NOTE: 由于出错,SAS 系统停止处理该步。
WARNING: 数据集 WORK.Y 可能不完整。该步停止时,共有 0 个观测和 29 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.01 秒




stata SPSS
l1i2n3i4n5g 在职认证  发表于 2018-1-4 14:30:37 |显示全部楼层
data want;
   merge y:;
   by date;
run;
回复

使用道具 举报

wanwanle2 在职认证  发表于 2018-1-4 14:40:40 |显示全部楼层
还是会出错。无法解决空的数据集
1941  data y;
1942  merge y:;
1943  by date;
1944  run;

ERROR: BY 变量 date 不在输入数据集 WORK.Y10 中。
ERROR: BY 变量 date 不在输入数据集 WORK.Y2 中。
ERROR: BY 变量 date 不在输入数据集 WORK.Y4 中。
ERROR: BY 变量 date 不在输入数据集 WORK.Y6 中。
NOTE: 由于出错,SAS 系统停止处理该步。
WARNING: 数据集 WORK.Y 可能不完整。该步停止时,共有 0 个观测和 29 个变量。
WARNING: 数据集 WORK.Y 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.01 秒
回复

使用道具 举报

l1i2n3i4n5g 在职认证  发表于 2018-1-4 15:01:44 |显示全部楼层
或者用其他方法合并,或者想办法把空数据集删除
回复

使用道具 举报

fengjuven 发表于 2018-1-4 22:00:20 |显示全部楼层
%macro merge();
%do i = 1 %to 50;
data y&i.;
set y&i.;
if date = . then date = .;
run;
%end;
data y;
merge
%do j = 1 %to 50;
y&j.
%end;;
by date;
run;
%mend merge;
%merge();
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
wanwanle2 + 5 + 1 + 1 + 1 精彩帖子

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

回复

使用道具 举报

流水不朽 发表于 2018-1-5 09:33:11 |显示全部楼层
proc contents data=work._all_ out=tmp_all(keep=memname nobs where=(nobs^=0)) noprint;run;

proc sql noprint;
        select distinct strip(memname) into : tbl_all separated by ' '
          from tmp_all
         where memname like 'Y%';
quit;

%put &tbl_all.;

data        Y;
  merge &tbl_all.;
     by date;
run;
已有 3 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
0bama + 1 精彩帖子
lovexialulu + 1 + 1 + 1 + 1 观点有启发
wanwanle2 + 5 + 1 + 1 + 1 精彩帖子

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

回复

使用道具 举报

舍身卫道 发表于 2018-1-10 09:17:34 |显示全部楼层
流水不朽 发表于 2018-1-5 09:33
proc contents data=work._all_ out=tmp_all(keep=memname nobs where=(nobs^=0)) noprint;run;

proc sq ...
楼上正解,学习了
回复

使用道具 举报

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

GMT+8, 2018-7-20 11:05