SAS中文论坛

标题: 如何用SAS自动导入数据 [打印本页]

作者: shiyiming    时间: 2007-11-25 13:02
标题: 如何用SAS自动导入数据
问题描述如下:

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

请大家指点。谢谢
作者: shiyiming    时间: 2007-12-4 17:47
标题: Re: 如何用SAS自动导入数据
看来Execl的数据,还是要有命名的规则,才能自动导入!
作者: shiyiming    时间: 2007-12-8 22:48
标题: Re: 如何用SAS自动导入数据
通配符,还有笨点儿的宏变量都是干什么的呀。笨。
作者: shiyiming    时间: 2007-12-11 09:45
标题: Re: 如何用SAS自动导入数据
1.不知道楼主所指的"通配符"是什么
2.当然是用宏变量来批量导入数据,但是如果命名(外部数据) 没有规则,不知道如何使用这个宏变量,请楼主指点!
3.如果可以,请公布代码,谢谢.
作者: shiyiming    时间: 2007-12-11 16:20
标题: Re: 如何用SAS自动导入数据
这个问题不错,代码写给你了,如有疑问可跟我交流

[code:1gwuva3p]
/*
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:1gwuva3p]
作者: shiyiming    时间: 2007-12-11 17:27
标题: Re: 如何用SAS自动导入数据
楼上强的!赞一个!
作者: shiyiming    时间: 2007-12-20 21:13
标题: Re: 如何用SAS自动导入数据
多谢楼主“zhoubin”,如果可能,邀请楼主加入sas群(11881806)
附带说一句,代码中的“cats”函数在SAS8中好像没有,要9.0版本才有?
作者: shiyiming    时间: 2007-12-20 22:15
标题: to yls
是的,cats函数是SAS9新增的:Concatenates character strings and removes leading and trailing blanks
[code:zwwyaovp]data _null_;
   x='  The   Olym';
   y='pic Arts Festi';
   z='  val includes works by D  ';
   a='ale Chihuly.';
   result=cats(x,y,z,a);
   put result $char.;
run;[/code:zwwyaovp]
你也可以用right、left、trim等函数的组合实现同样的效果。
作者: shiyiming    时间: 2007-12-29 14:58
标题: Re: 如何用SAS自动导入数据
楼上的说的确实有道理,
一直用sas9,没考虑到向下兼容的问题,
反正就是生成一些宏变量而已,
变通方法有很多的。
作者: shiyiming    时间: 2011-12-9 22:59
标题: Re: 如何用SAS自动导入数据
1. 给定1000个excel格式的数据表,都是股票数据。
2. 数据表取名的形式为stock600100.csv、stock600073.csv...等,形式很不“整齐”。
3. 如何设计一个SAS的程序,自动将这1000个数据导入,
并将其取名为原来文件的名字,比如命名为stock600100,stock600073,...的形式。
作者: shiyiming    时间: 2011-12-10 00: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;
作者: shiyiming    时间: 2011-12-23 14:21
标题: 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]
很强大,想问问友友如何达此境界的?!
作者: shiyiming    时间: 2011-12-23 14:21
标题: 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]
很强大,想问问友友如何达此境界的?!
作者: shiyiming    时间: 2012-7-16 13:29
标题: Re: 如何用SAS自动导入数据
mark




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2