楼主: appleqiuqiu
1779 12

[问答] 请教拆分数据集 [推广有奖]

  • 0关注
  • 1粉丝

已卖:773份资源

副教授

41%

还不是VIP/贵宾

-

威望
0
论坛币
3666 个
通用积分
2.9200
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
4191 点
帖子
133
精华
0
在线时间
1514 小时
注册时间
2010-4-27
最后登录
2022-6-22

楼主
appleqiuqiu 发表于 2014-1-8 21:02:24 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我现在有一个数据文件,总共4亿3千多万行,我想拆成每个有一千万行的数据文件,这样方便我导出txt文件打开。我写了一段代码,不知可否,
  1. data test1-test44;
  2. set all;
  3. if firstobs=1 obs=10000000 then output test1;
  4. if firstobs=10000001 obs=20000000 then output test2;
  5. :
  6. :
  7. :
  8. /*最后一个不够1千万,但是知道最后一个是第多少行,该如何写*/
  9. run
复制代码

二维码

扫码加我 拉你入群

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

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

关键词:数据集 output First outpu test 如何

回帖推荐

yuerqieqie 发表于3楼  查看完整内容

沙发
zhengbo8 发表于 2014-1-8 21:08:02
使用_N_判断大于4亿3千万,真羡慕这么多数据。

藤椅
yuerqieqie 发表于 2014-1-8 21:25:09
  1. %macro splitdata(n = , step = );
  2. data %do i = 1 %to &n; test&i %end;;
  3.         set all;
  4.         %do i = 1 %to &n;
  5.         if (&i - 1) < _N_/&step <= &i then output test&i;
  6.         %end;
  7. run;
  8. %mend;
  9. %splitdata(n = 44, step = 10000000);
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

板凳
appleqiuqiu 发表于 2014-1-8 22:54:20
zhengbo8 发表于 2014-1-8 21:08
使用_N_判断大于4亿3千万,真羡慕这么多数据。

报纸
appleqiuqiu 发表于 2014-1-8 23:41:36
zhengbo8 发表于 2014-1-8 21:08
使用_N_判断大于4亿3千万,真羡慕这么多数据。

地板
appleqiuqiu 发表于 2014-1-8 23:42:51
yuerqieqie 发表于 2014-1-8 21:25
想问一下,data后面不应该直接跟数据集吗?这里可以直接写do?

7
appleqiuqiu 发表于 2014-1-8 23:45:32
yuerqieqie 发表于 2014-1-8 21:25
还有就是if那里没看懂。。。。

8
yuerqieqie 发表于 2014-1-9 21:21:07
appleqiuqiu 发表于 2014-1-8 23:42
想问一下,data后面不应该直接跟数据集吗?这里可以直接写do?
那是%do。macro 语句,帮你生成dataset name 从test1 到 test44。

9
yuerqieqie 发表于 2014-1-9 21:27:47
appleqiuqiu 发表于 2014-1-8 23:45
还有就是if那里没看懂。。。。
_n_是data step自动生成检测iteration 次数的,这里可以用作监测运行到第几个observation。
&i = 1时,if 语句解开来就是 if 0 < _n_/10000000 <= 1 then output test1. 也就是observation从大于0开始到10000000都输出到数据集test1里。

&i = 2时,if 语句解开来就是 if 1 < _n_/10000000 <= 2 then output test2. 也就是observation从大于10000000开始到20000000都输出到数据集test2里。

以此类推。
这个方法就是效率有点低。

10
yuerqieqie 发表于 2014-1-9 21:33:47
appleqiuqiu 发表于 2014-1-8 23:45
还有就是if那里没看懂。。。。
更效率一点的code是
  1. %macro splitdata(n = , step = );

  2. data %do i = 1 %to &n; test&i %end;;

  3.         set all;

  4.                 if _N_ <= &step then output test1;
  5.         %do i = 2 %to &n;

  6.                 else if _N_ <= (&i * &step) then output test&i;

  7.         %end;

  8. run;

  9. %mend;

  10. %splitdata(n = 44, step = 10000000);
复制代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-20 11:15