楼主: 小鳄鱼a
4399 6

如何将巨大sas数据集批量转换成一个个的csv或者txt文件 [推广有奖]

  • 6关注
  • 10粉丝

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

100论坛币
我的sas数据集有好几个g,一千多万条观测,请问怎样批量转换成csv或者txt文件,我是想让它能够被c++读取。
希望能帮忙写出个宏,谢谢

最佳答案

godxh 查看完整内容

假设你的SAS数据集是input, 数据集中的变量是text, 每100000输出一个txt文件。
关键词:sas数据集 数据集 txt 如何
沙发
godxh 在职认证  发表于 2015-9-21 21:23:38 |只看作者 |坛友微信交流群
假设你的SAS数据集是input, 数据集中的变量是text, 每100000输出一个txt文件。

  1. data _null_;
  2.     set input nobs=nobs;
  3.     call symputx("nobs", nobs);
  4.     stop;
  5. run;

  6. %put nobs=&nobs.;

  7. %let count=%sysevalf(%sysfunc(ceil(&nobs./100000)));
  8. %put &count;

  9. %macro extract;
  10. %do i=1 %to &count.;
  11.     %if &i.=&count. %then %do;
  12.         data _null_;
  13.             set input (firstobs=%eval((&i-1)*100000+1) obs=max);
  14.             file "D:\TEST\test2\file_&i..txt";
  15.             put text;
  16.        run;
  17.     %end;
  18.     %else %do;
  19.         data _null_;
  20.             set input (firstobs=%eval((&i-1)*100000+1) obs=%eval(&i.*100000));
  21.             file "D:\TEST\test2\file_&i..txt";
  22.             put text;
  23.         run;
  24.     %end;
  25. %end;
  26. %mend;

  27. %extract;
复制代码


已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 + 1 热心帮助其他会员
小鳄鱼a + 5 + 5 + 5 + 5 精彩帖子

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

使用道具

藤椅
godxh 在职认证  发表于 2015-9-22 14:19:34 |只看作者 |坛友微信交流群
这个要求太不明确了,sas数据集只有一个数据集么? 是输出多个txt还是一个txt文件呢?如果是多个,每个txt是否有输出条件?

使用道具

板凳
小鳄鱼a 发表于 2015-9-22 15:15:26 |只看作者 |坛友微信交流群
godxh 发表于 2015-9-22 14:19
这个要求太不明确了,sas数据集只有一个数据集么? 是输出多个txt还是一个txt文件呢?如果是多个,每个txt是 ...
只有一个千万条的观测数据集,想生成多个txt,txt的前缀名相同 ,后面是编号   比如    files(1) files(2) files(3)等等       。   步骤是不是 ,先看看sas有多少条观测  ,然后每(比如说10万观测输入到一个txt中)

使用道具

报纸
小鳄鱼a 发表于 2015-9-22 19:10:13 |只看作者 |坛友微信交流群
godxh 发表于 2015-9-22 14:19
这个要求太不明确了,sas数据集只有一个数据集么? 是输出多个txt还是一个txt文件呢?如果是多个,每个txt是 ...
非常感谢

使用道具

地板
小鳄鱼a 发表于 2015-9-22 19:25:34 |只看作者 |坛友微信交流群
godxh 发表于 2015-9-22 14:19
这个要求太不明确了,sas数据集只有一个数据集么? 是输出多个txt还是一个txt文件呢?如果是多个,每个txt是 ...
我把所有的变量   都输出了    put _all_;

但能否让变量名只在第一行出现,而不是每一行都出现变量名

1.png (20.76 KB)

1.png

使用道具

7
godxh 在职认证  发表于 2015-9-23 09:17:40 |只看作者 |坛友微信交流群
小鳄鱼a 发表于 2015-9-22 19:25
我把所有的变量   都输出了    put _all_;

但能否让变量名只在第一行出现,而不是每一行都出现变量名
...
把macro改一下,这里变量1-变量n替换为你具体想用的SAS数据集变量:
  1. %macro extract;
  2. %do i=1 %to &count.;
  3.     %if &i.=&count. %then %do;
  4.         data _null_;
  5.             file "D:\TEST\test2\file_&i..txt";
  6.             if _n_=1 then do;
  7.                 put "变量1   变量2  ... 变量n";
  8.             end;
  9.             set input (firstobs=%eval((&i-1)*100000+1) obs=max);
  10.             put 变量1   变量2  ... 变量n;
  11.        run;
  12.     %end;
  13.     %else %do;
  14.         data _null_;
  15.             file "D:\TEST\test2\file_&i..txt";
  16.             if _n_=1 then do;
  17.                 put "变量1   变量2  ... 变量n";
  18.             end;
  19.             set input (firstobs=%eval((&i-1)*100000+1) obs=%eval(&i.*100000));
  20.             put 变量1   变量2  ... 变量n;
  21.         run;
  22.     %end;
  23. %end;
  24. %mend;
复制代码


已有 1 人评分论坛币 学术水平 热心指数 收起 理由
小鳄鱼a + 5 + 3 + 3 精彩帖子

总评分: 论坛币 + 5  学术水平 + 3  热心指数 + 3   查看全部评分

使用道具

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

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

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

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