SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

如何用SAS自动导入数据

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2011-12-10 00:22:22 | 只看该作者

Re: 如何用SAS自动导入数据

参考该程序
x "dir C:\*.txt /b > C:\all.txt";
%macro daoru(name) ;                                 
PROC IMPORT OUT= WORK.&name                        
            DATAFILE= "E:\a\&name..TXT"              
            DBMS=TAB REPLACE;
     GETNAMES=NO;                             
RUN;
%mend;
data _null_;
        infile "C:\all.txt";
        input str $100.;
        call execute(compress('%daoru('||scan(str,1,'.')||')'));  
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2011-12-23 14:21:26 | 只看该作者

Re: 如何用SAS自动导入数据

[quote="zhoubin":jnpsf2bi]这个问题不错,代码写给你了,如有疑问可跟我交流

[code:jnpsf2bi]
/*
1. 给定1000个excel格式的数据表,都是股票数据。
2. 数据表取名的形式为600100.SS.csv、600073.SS.csv...等,形式很不“整齐”。
3. 如何设计一个SAS的程序,自动将这1000个数据导入,
并将其取名规范化,比如命名为data1,data2,...data1000的形式。
*/


*具体的导入文本文件的宏,实际使用时可根据数据结构自行更改;
%macro LoadSRC(lib,txt,fname,sname);
        data &lib..&sname;
                infile "&txt.\&fname";
                input x;
        run;
%mend;

*完成导入功能的宏,可自行设置参数进行使用;
*lib是用来存放数据集的逻辑库;
*txt存放csv文件的目录;
*sname生成的数据集前缀;
*具体使用方式可以参见例子;
%macro LoadDATA(lib,txt,sname);

        *读取目录下的文件名信息;
        data a1(keep = memname);
                rc=filename("mydir","&txt");
                did=dopen("mydir");
                memcount=dnum(did);
                do i = 1 to memcount;
                        memname = dread(did,i);
                        output;
                end;
        run;

        *产生程序控制所需要的宏变量;
        data _null_;
                set a1 end=last;
                call symput(cats('memname',_n_),memname);
                if last then call symput('memcount',_n_);
        run;

        *自动导入所有的文件;
        %do i = 1 %to &memcount;
                %LoadSRC(&lib,&txt,&&memname&i,&sname&i);
        %end;

%mend;

*例子:
*假设d:\test下存放的全是对应的csv文件,而且各csv文件中只有一个字段;
%let txt = d:\test;
%LoadDATA(work,&txt,icq);
[/code:jnpsf2bi][/quote:jnpsf2bi]
很强大,想问问友友如何达此境界的?!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2011-12-23 14:21:32 | 只看该作者

Re: 如何用SAS自动导入数据

[quote="zhoubin":3na81ng5]这个问题不错,代码写给你了,如有疑问可跟我交流

[code:3na81ng5]
/*
1. 给定1000个excel格式的数据表,都是股票数据。
2. 数据表取名的形式为600100.SS.csv、600073.SS.csv...等,形式很不“整齐”。
3. 如何设计一个SAS的程序,自动将这1000个数据导入,
并将其取名规范化,比如命名为data1,data2,...data1000的形式。
*/


*具体的导入文本文件的宏,实际使用时可根据数据结构自行更改;
%macro LoadSRC(lib,txt,fname,sname);
        data &lib..&sname;
                infile "&txt.\&fname";
                input x;
        run;
%mend;

*完成导入功能的宏,可自行设置参数进行使用;
*lib是用来存放数据集的逻辑库;
*txt存放csv文件的目录;
*sname生成的数据集前缀;
*具体使用方式可以参见例子;
%macro LoadDATA(lib,txt,sname);

        *读取目录下的文件名信息;
        data a1(keep = memname);
                rc=filename("mydir","&txt");
                did=dopen("mydir");
                memcount=dnum(did);
                do i = 1 to memcount;
                        memname = dread(did,i);
                        output;
                end;
        run;

        *产生程序控制所需要的宏变量;
        data _null_;
                set a1 end=last;
                call symput(cats('memname',_n_),memname);
                if last then call symput('memcount',_n_);
        run;

        *自动导入所有的文件;
        %do i = 1 %to &memcount;
                %LoadSRC(&lib,&txt,&&memname&i,&sname&i);
        %end;

%mend;

*例子:
*假设d:\test下存放的全是对应的csv文件,而且各csv文件中只有一个字段;
%let txt = d:\test;
%LoadDATA(work,&txt,icq);
[/code:3na81ng5][/quote:3na81ng5]
很强大,想问问友友如何达此境界的?!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
14#
 楼主| 发表于 2012-7-16 13:29:02 | 只看该作者

Re: 如何用SAS自动导入数据

mark
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-6 09:53 , Processed in 0.071565 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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