楼主: clarepan
12148 18

[问答] 用宏批量读入txt,之后如何只生成一个文件? [推广有奖]

  • 0关注
  • 0粉丝

小学生

7%

还不是VIP/贵宾

-

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

楼主
clarepan 在职认证  发表于 2010-11-16 19:43:20 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有100个TXT文件,文件命不规范,都是60开头(上海股票代码),但格式完全相同,单个文件读入sas没有问题。
现在想通过宏导入,每个TXT文件对应生成一个数据集。
初步设想:
1,在该文件目录下键入dir *.txt /b >ex.txt,将100个txt文件名导入文本文件all.txt中
2.编写宏及程序
%macro a(stockcode);
data a&stockcode;
infile "d:\Level-2 and Topview\0710\All_2007-10-08\Stock_details\&stockcode..txt" firstobs=2;
input code $ cjtime price vol amount;
informat cjtime time.;
format cjtime time.;
run;
%mend a;
%include "d:\Level-2 and Topview\0710\All_2007-10-08\Stock_details\all.txt";
run;

这是一个版友的程序,我编的的和他出不多,借他的来说明一下问题。
他是生成100个数据集,但我需要这一百个txt自己合成一个数据集~
我试过去掉data a&stockcode;中的&stockcode,但是这样只能生成第100个txt的数据集。
请牛人们给我出出主意~怎样才能自动生成一个数据集
二维码

扫码加我 拉你入群

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

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

关键词:txt informat Details TOPView informa 导入数据

回帖推荐

soporaeternus 发表于4楼  查看完整内容

我不认为把很多“小”的dataset通过append合起来 会比一个set省多少开销 提供一个用infile的filevar选项的方法 很久没用了,貌似可以更简单点的......

本帖被以下文库推荐

沙发
Bridgenc 发表于 2010-11-16 19:48:08
use proc append in your macro

藤椅
clarepan 在职认证  发表于 2010-11-16 20:55:45
2# Bridgenc

多谢啦~~~我试过啦~~proc append 确实可以~~果然牛!~~
我原先就只想到用set拼接,结果在海量数据下慢的要死,原来有append这种好东西~
谢谢啦~

板凳
soporaeternus 发表于 2010-11-16 22:14:04
我不认为把很多“小”的dataset通过append合起来
会比一个set省多少开销
提供一个用infile的filevar选项的方法
很久没用了,貌似可以更简单点的......
  1. options noxwait;

  2. x "dir d:\*.txt /b > d:\filename";

  3. data ccc;
  4.         length file $300;
  5.         infile "d:\filename";
  6.         input file:$300.;
  7.         file=compress("D:\"||file);
  8.         infile aaa filevar=file end=eof;
  9.         do while (not eof);
  10.                 input x;
  11.                 output;
  12.         end;
  13. run;

  14. x "del d:\filename";
复制代码
已有 4 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
sopching + 1 + 1 + 1 nice
crackman + 100 打赏100大洋
peijiamei + 4 + 1 精彩帖子
chouxiangdaishu + 1 + 1 + 1 excellent!

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

Let them be hard, but never unjust

报纸
chouxiangdaishu 发表于 2010-11-16 23:00:51
当数据量和txt数据比较多,读入每个数据成SAS数据集,然后再用set或append,比一次性读入成一个文件安全。后者可能因为数据步异常或其他原因引起程序中止,导致数据集出错,程序得重新运行。

地板
sushe1527 发表于 2010-11-17 15:19:53
soporaeternus 发表于 2010-11-16 22:14
我不认为把很多“小”的dataset通过append合起来
会比一个set省多少开销
提供一个用infile的filevar选项的方法
很久没用了,貌似可以更简单点的......
  1. options noxwait;

  2. x "dir d:\*.txt /b > d:\filename";

  3. data ccc;
  4.         length file $300;
  5.         infile "d:\filename";
  6.         input file:$300.;
  7.         file=compress("D:\"||file);
  8.         infile aaa filevar=file end=eof;
  9.         do while (not eof);
  10.                 input x;
  11.                 output;
  12.         end;
  13. run;

  14. x "del d:\filename";
复制代码
顶、、、、、、、、、、、、、、、、

7
邢不行 在职认证  发表于 2010-12-2 15:17:52
我也想批量导入txt格式的数据,文件名也同样的很不规范。
请问楼主:你给出的程序中
“1,在该文件目录下键入dir *.txt /b >ex.txt,将100个txt文件名导入文本文件all.txt中”这句话和与之对应的
%include "d:\Level-2 and Topview\0710\All_2007-10-08\Stock_details\all.txt";这句话分别是什么意思以及具体如何操作?
非常感谢!

8
邢不行 在职认证  发表于 2010-12-2 22:59:37
1# clarepan 我就想实现把不同的文件放入不同的数据集,所以直接引用了楼主的代码
我已经完成了第一步将该文件目录下的txt文件名导入文本文件all.txt中


第二步我直接复制了楼主的代码,修改了路径,但是不行啊。
想上去最后一句好像是有问题,宏编完就只要输入下面这句话就可以了嘛?
“%include "d:\Level-2 and Topview\0710\All_2007-10-08\Stock_details\all.txt";”
不知道怎么修改


出现的错误提示是这样子的
5964  %macro a(stockcode);
5965  data a&stockcode;
5966  infile "E:\stock\export\&stockcode..txt" firstobs=2;
5967  input var1$ var2-var7;
5968
5969  run;
5970  %mend a;
5971  %include "E:\stock\export\all.txt";                  /*以上是原程序*/
5972 +000001.TXT
      -------
      180
ERROR 180-322: 语句无效或未按正确顺序使用。


希望楼主能稍微指点一下~

9
sean1945 发表于 2010-12-3 08:33:19
高手就是高手啊,佩服。
他大舅他二舅都是他舅,高桌子低板凳都是木头

10
邢不行 在职认证  发表于 2010-12-3 18:58:12
4# soporaeternus 大神好:
我的问题和楼主问的差不多,我正好是想把所有的文件导入到不同的数据集中,想用楼主提供的函数来做,
我已经完成了第一步将该文件目录下的txt文件名导入文本文件all.txt中

第二步我直接复制了楼主的代码,修改了路径,但是不行啊。
想上去最后一句好像是有问题,宏编完就只要输入下面这句话就可以了嘛?
“%include "d:\Level-2 and Topview\0710\All_2007-10-08\Stock_details\all.txt";”
肯定还要加上几句宏调用的语句,但是宏怎么调用all文件里面的参数呢? 求大神指导~



出现的错误提示是这样子的
5964  %macro a(stockcode);
5965  data a&stockcode;
5966  infile "E:\stock\export\&stockcode..txt" firstobs=2;
5967  input var1$ var2-var7;
5968
5969  run;
5970  %mend a;
5971  %include "E:\stock\export\all.txt";                  /*以上是原程序*/
5972 +000001.TXT
      -------
      180
ERROR 180-322: 语句无效或未按正确顺序使用。

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

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