楼主: zespri
7173 17

[原创博文] 有没有方法把一个文件夹中的EXCEL都读入SAS [推广有奖]

  • 0关注
  • 1粉丝

VIP

已卖:1278份资源

讲师

50%

还不是VIP/贵宾

-

威望
0
论坛币
3869 个
通用积分
272.6608
学术水平
7 点
热心指数
9 点
信用等级
8 点
经验
35949 点
帖子
374
精华
0
在线时间
616 小时
注册时间
2006-5-16
最后登录
2025-5-7

楼主
zespri 发表于 2009-11-24 14:13:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请问: 有没有方法把一个文件夹中的EXCEL都读入SAS?

我有很多EXCEL文件, 都不长, 有相同的列, 但有近百个?
有没有办法, 都读入SAS,
我现在是一一读入SAS, 再合并, 很慢. 想请教有没有好办法?


谢谢
二维码

扫码加我 拉你入群

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

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

关键词:EXCEL xcel exce 文件夹 cel 文件夹 EXCEL

回帖推荐

MyLoveSas 发表于5楼  查看完整内容

4#的方法很简洁,长见识了,学习中。。。把我的也补充完整 %let extfile = xls ;/*扩展名*/ %let dirpath= D:\data\ ; /*文件所在目录路径*/ filename dirpipe pipe 'dir &dirpath.\*..&extfile./b' ; data _info ; length filepath $120. ; infile terms pad missover end=eof; input @1 filename $20.; filepath = "&dirpath" || trim(filename) ; filename = scan( filename , 1 ) ; call symput('fi ...

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

*指定数据文件所在的目录; %let path=f:\tmp\; *把所有xls放入tmp中 *指定输出数据集前缀; %let OutPrefix=gan; x "dir &path.*.xls /b > &path.fname.txt"; %macro importxls(filename,ith); proc import datafile="&path.&filename" out=&OutPrefix.&ith dbms=excel replace; run; *以下三行语句是合并所有数据集,条件要求:数据集变量结构一致; data all; set %if &ith ne 1 %then all; &OutPrefix.&ith ...

MyLoveSas 发表于16楼  查看完整内容

试试proc import的如下选项试试? MIXED=YES | NO; converts numeric data values into character data values for a column that contains mixed data types. This option is valid only while importing data from Excel. The default is NO, which means that numeric data will be imported as missing values in a character column. If MIXED=YES, then the engine will assign a SAS character type for the colu ...

本帖被以下文库推荐

沙发
MyLoveSas 发表于 2009-11-24 14:39:56
使用filename语句及pipe可以遍历到某文件夹下的所有xls文件名称并存储在sas数据集中,使用proc import然后合并这些文件就可以了,下是google提供的一小段代码,细节楼主可以参考filename的pipe devic type的用法。

filename terms pipe 'dir D:\data\*.xls/b';
data xlsfilename ;
   infile terms pad missover end=eof;
   input @1 filename $40.;
   call symput('file' || left(_n_),filename);
   if eof then call symput('nfiles',left(_n_));
run;
已有 1 人评分论坛币 热心指数 收起 理由
eijuhz + 100 + 5 热心回答他人疑问

总评分: 论坛币 + 100  热心指数 + 5   查看全部评分

藤椅
huananligong 发表于 2009-11-24 15:55:32
能行吗???

板凳
sushe1527 发表于 2009-11-24 16:24:44
*指定数据文件所在的目录;
%let path=f:\tmp\;
*把所有xls放入tmp中

*指定输出数据集前缀;
%let OutPrefix=gan;

x "dir &path.*.xls /b > &path.fname.txt";

%macro importxls(filename,ith);
proc import datafile="&path.&filename" out=&OutPrefix.&ith dbms=excel replace;
run;

*以下三行语句是合并所有数据集,条件要求:数据集变量结构一致;
data all;
   set %if &ith ne 1 %then all; &OutPrefix.&ith;
run;
%mend;

data _null_;
infile "&path.fname.txt";
input filename & $100.;
*执行宏;
call execute('%importxls(' || trim(filename) || ',' || _n_ || ')');
run;
已有 2 人评分经验 论坛币 学术水平 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
eijuhz + 60 + 100 + 3 + 5 热心回答他人疑问

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

报纸
MyLoveSas 发表于 2009-11-24 17:03:28
4#的方法很简洁,长见识了,学习中。。。把我的也补充完整

%let extfile = xls ;/*扩展名*/
%let dirpath= D:\data\ ; /*文件所在目录路径*/
filename dirpipe pipe 'dir &dirpath.\*..&extfile./b' ;

data _info ;
  length filepath $120. ;
  infile terms pad missover end=eof;
  input @1 filename $20.;
  filepath = "&dirpath" || trim(filename) ;
  filename = scan( filename , 1 ) ;
  call symput('filepath' || left(_n_),filepath);
  call symput('filename' || left(_n_),filename);
  if eof then call symput('nfiles',left(_n_));
run;

%macro importdbf ;
  %do i = 1 %to &nfiles ;
    proc import datafile = "&&filepath&i" out = %trim(&&filename&i) dbms = &extfile ;
    run ;
  %end ;

  proc sql noprint ;
    select filename into : datasets separated by ' ' from _info ;
  quit ;

  data all ;
    set &datasets ;
  run ;
%mend importdbf ;

%importdbf ;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

地板
zespri 发表于 2009-11-25 05:47:07
太感谢各位高人了.

7
zespri 发表于 2009-11-25 08:33:47
4# sushe1527

能看一下问题吗?

271  %let path=C:\test\;
272  %let OutPrefix=gan;
273  x "dir &path.*.xls /b > &path.fname.txt";
274
275  %macro importxls(filename,ith);
276  proc import datafile="&path.&filename" out=&OutPrefix.&ith dbms=excel replace;

277  run;
WARNING: The quoted string currently being processed has become more than 262 characters long.
         You may have unbalanced quotation marks.
278
279  data all;
280     set %if &ith ne 1 %then all; &OutPrefix.&ith;
281  run;
282  %mend;
WARNING: Apparent invocation of macro IMPORTXLS not resolved.
283
284  data _null_;
285  infile "&path.fname.txt";
286  input filename & $100.;
287  call execute('%importxls(' || trim(filename) || ',' || _n_ || ')');
288  run;

8
zespri 发表于 2009-11-25 08:40:00
5# MyLoveSas

我也没能成功运行这程序, 加不加空格都一样?

400  %let extfile = xls ;
401  %let dirpath= C:\test\ ;
402  filename dirpipe pipe 'dir &dirpath.\*..&extfile./b';
403
404  data _info ;
405    length filepath $120. ;
402  filename dirpipe pipe 'dir &dirpath.\*..&extfile./b';
                                                        --
                                                        49
NOTE 49-169: The meaning of an identifier after a quoted string may change in a future SAS
             release.  Inserting white space between a quoted string and the succeeding
             identifier is recommended.

406    infile terms pad missover end=eof;
407    input @1 filename $20.;
408    filepath = "&dirpath" || trim(filename) ;
409    filename = scan( filename , 1 ) ;
410    call symput('filepath'
                            -
                            49
410!  || left(_n_),filepath);
NOTE 49-169: The meaning of an identifier after a quoted string may change in a future SAS
             release.  Inserting white space between a quoted string and the succeeding
             identifier is recommended.

411    call symput('filename' || left(_n_),filename);
412    if eof then call symput('nfiles',left(_n_));
413  run;
414
415  %macro importdbf ;
416    %do i = 1 %to &nfiles ;
417      proc import datafile = "&&filepath&i" out = %trim(&&filename&i) dbms = &extfile ;

418      run ;
419    %end ;
420
421    proc sql noprint ;
422      select filename into : datasets separated by ' ' from _info ;
423    quit ;
424
425    data all ;
426      set &datasets ;
427    run ;
428  %mend importdbf ;
429
430  %importdbf ;

9
sushe1527 发表于 2009-11-25 08:59:20
xls名字不能太长的原因

10
zespri 发表于 2009-11-25 09:14:57
9# sushe1527


我用a1.xls, 很奇怪

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

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