楼主: xeon.chenzi
11244 10

[问答] 关于批量导入XPT文件 [推广有奖]

  • 0关注
  • 0粉丝

学前班

70%

还不是VIP/贵宾

-

威望
0
论坛币
8 个
通用积分
0
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
39 点
帖子
4
精华
0
在线时间
0 小时
注册时间
2011-3-1
最后登录
2015-11-19

楼主
xeon.chenzi 发表于 2014-6-8 14:17:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
新人求教:
从教程上得知可以用以下code将xpt文件读入SAS(in this case, lib MY):
  1. LIBNAME MY "S:\DATA"; LIBNAME XP XPORT "S:\XXX.XPT"; PROC COPY IN=XP OUT=MY; RUN;
复制代码
但是现在有N多xpt文件需要读入SAS,一个一个操作太繁琐,想用macro搞了半天也不成,看精华(导excel)也没能举一反三。
想请问大侠怎么一次性在SAS中批量导入xpt文件?

多谢多谢!
二维码

扫码加我 拉你入群

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

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

关键词:批量导入 libname xport Macro EXCEL excel

已有 1 人评分热心指数 收起 理由
eijuhz + 2 精彩帖子

总评分: 热心指数 + 2   查看全部评分

本帖被以下文库推荐

沙发
hxx10 发表于 2014-6-17 09:14:23
你好,想问下一个个是如何导入的,目前我还不会,按照上述的程序就可以吗?谢谢。

藤椅
pobel 在职认证  发表于 2014-6-17 10:00:17
楼主可以试一下:

LIBNAME MY "S:\DATA";
filename mydir pipe "dir ""S:\"" /b /s";
data content;
        infile mydir lrecl=300 truncover;
        input @1 content $200. ;
        if upcase(substr(content,length(content)-2,3))="XPT";

    call execute("libname xp xport '"||strip(content)||"';");
        call execute(" PROC COPY IN=XP OUT=MY; RUN;");
run;
filename mydir clear;

板凳
wwang111 发表于 2014-6-17 10:08:38
filename mydir pipe 'dir "S:\" /b';
data content;
infile mydir lrecl=300 truncover;
input @1 content $100. ;
format content $100.;
if upcase(scan(content,-1,'.'))='XPT';
run;
filename mydir clear;

libname MY 'S:\DATA';
data _null_;
set content;
length code $3000;
code1="LIBNAME XP XPORT 'S:\"||strip(content)||"';";
code2="PROC COPY IN=XP OUT=MY MEMTYPE=DATA;RUN;";
code=strip(code1)||strip(code2);
call execute(code);
run;

报纸
xeon.chenzi 发表于 2014-6-30 10:14:31
hxx10 发表于 2014-6-17 09:14
你好,想问下一个个是如何导入的,目前我还不会,按照上述的程序就可以吗?谢谢。
是的,一个个导入可以用顶楼的code

地板
xeon.chenzi 发表于 2014-6-30 10:20:15
pobel 发表于 2014-6-17 10:00
楼主可以试一下:

LIBNAME MY "S:\DATA";
多谢多谢,我这就尝试下,因为project时间紧,我后来自己找到了一下code,确定可以批量导入。
  1. %macro drive(dir,ext,out);                                                                                                                  
  2.   %let filrf=mydir;                                                                                                                     
  3.   %let rc= %sysfunc(filename(filrf,&dir));                                                                                                
  4.   %let did= %sysfunc (dopen(&filrf));                                                                                                      
  5.   %let memcnt= %sysfunc (dnum(&did));                                                                                                      
  6.    %do i = 1 %to &memcnt;                                                                                                               
  7.      %let name= %qscan (%qsysfunc (dread(&did,&i)),-1,.);                                                                                   
  8.      %if %qupcase( %qsysfunc (dread(&did,&i))) ne %qupcase (&ext) %then %do ;                                                                  
  9.      %if ( %superq(ext) ne and %qupcase (&name) = %qupcase (&ext)) or                                                                       
  10.          ( %superq (ext) = and %superq (name) ne) %then %do;   
  11.        libname old xport "&dir.\%qsysfunc(dread(&did,&i))" ;
  12.              libname new "&out" ;
  13.              proc copy in =old out=new;
  14.              run ;
  15.      %end;                                                                                                                              
  16.    %end;
  17.   %end;
  18.   %let rc= %sysfunc(dclose(&did));                                                                                                        
  19. %mend drive;  
  20.   %drive(C:\your source folder\,xpt,C:\your destination folder\)
复制代码
再次感谢。

7
xeon.chenzi 发表于 2014-6-30 10:23:36
wwang111 发表于 2014-6-17 10:08
filename mydir pipe 'dir "S:\" /b';
data content;
infile mydir lrecl=300 truncover;
同样感谢,尽管最后用了上楼的code。

8
xingls 发表于 2018-1-15 10:12:17
感觉好复杂啊。

9
aiyjd211 发表于 2018-6-22 10:01:28
xeon.chenzi 发表于 2014-6-30 10:20
多谢多谢,我这就尝试下,因为project时间紧,我后来自己找到了一下code,确定可以批量导入。再次感谢。
...
此 Code 非常好用,32个暂

10
rochmusic 在职认证  发表于 2021-5-24 06:54:35
wwang111 发表于 2014-6-17 10:08
filename mydir pipe 'dir "S:\" /b';
data content;
infile mydir lrecl=300 truncover;
这个宏程序超赞,谢谢!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 15:53