SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 800|回复: 2
打印 上一主题 下一主题

能不能用宏语言批量读dbf文件?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-2-17 09:33:49 | 只看该作者

能不能用宏语言批量读dbf文件?

大家帮帮忙吧,问题:一个文件下有许多个dbf文件,名字为sz60001.dbf,sz60002.dbf,sz60003.dbf
可能有些不连在一起的,每个文件名代表一个股票的代号,每一个dbf文件中是一个表,要提取第一列date时间和第五列股价
这两列的值一一对应,希望用date函数提取工作日的股价与时间,然后将各个表中的信息整合成如下表格
      1990-1-1 1990-1-2 。。。。。(日期)
zj60001 19           16
zj60002  14          13(股价)


(股票号码)
现在有几个难点:1。如何用宏语句批量的读入一个文件目录下的所有dbf文件,2。如何将文件的文件名保存为数据集合名或变量名3如何将各个数据集合加工为表格4。有些股票会在某些日期停排,那么这一天的数据在dbf文件中就没有相当于少了一天的数据,能否用一个宏将数据整理干净,就是将日期统一(我的想法是用date函数先写出一个标准的时间数据集合,然后用其他数据集合和它并联)5。宏语句中的用proc import 用了地址‘地址’
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-2-18 09:29:29 | 只看该作者

Re: 能不能用宏语言批量读dbf文件?

filename indata pipe 'dir D:\dbflist /b';
data file_list;
  length fname $50.;
  infile indata truncover; /* infile statement for file names */
  input fname $50.; /* read the file names from the directory */
  call symput ('num_files',_n_); /* store the record number in a macro variable */
run;

proc print data=file_list;
run;

%macro fileread;
  %do j=1 %to &num_files;
    data _null_;
       set file_list;
       if _n_=&j;
       call symput ('filein',fname);
    run;

   data temp;
      infile "D:\dbflist\&filein" firstobs=1 missover;
      input var1 var2 $;
   run;/*修改为输入单个dbf文件的code*/

   /* assemble the individual files */
   %if &j=1 %then %do;
     data data_all;
        set temp;
     run;
    %end;
   %else %do;
     data data_all;
       set data_all temp;
     run;
   %end;

%end; /* end of do-loop with index j */

%mend fileread;

%fileread;

摘自sugi paper
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-2-27 12:23:08 | 只看该作者

谢谢。

谢谢您的帮助。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 14:15 , Processed in 0.065872 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表