SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 4221|回复: 13
打印 上一主题 下一主题

如何用SAS自动导入数据

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2007-11-25 13:02:14 | 只看该作者

如何用SAS自动导入数据

问题描述如下:

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

请大家指点。谢谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2007-12-4 17:47:25 | 只看该作者

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

看来Execl的数据,还是要有命名的规则,才能自动导入!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2007-12-8 22:48:53 | 只看该作者

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

通配符,还有笨点儿的宏变量都是干什么的呀。笨。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2007-12-11 09:45:39 | 只看该作者

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

1.不知道楼主所指的"通配符"是什么
2.当然是用宏变量来批量导入数据,但是如果命名(外部数据) 没有规则,不知道如何使用这个宏变量,请楼主指点!
3.如果可以,请公布代码,谢谢.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2007-12-11 16:20:01 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2007-12-11 17:27:29 | 只看该作者

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

楼上强的!赞一个!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2007-12-20 21:13:45 | 只看该作者

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

多谢楼主“zhoubin”,如果可能,邀请楼主加入sas群(11881806)
附带说一句,代码中的“cats”函数在SAS8中好像没有,要9.0版本才有?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2007-12-20 22:15:23 | 只看该作者

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等函数的组合实现同样的效果。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2007-12-29 14:58:55 | 只看该作者

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

楼上的说的确实有道理,
一直用sas9,没考虑到向下兼容的问题,
反正就是生成一些宏变量而已,
变通方法有很多的。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

1. 给定1000个excel格式的数据表,都是股票数据。
2. 数据表取名的形式为stock600100.csv、stock600073.csv...等,形式很不“整齐”。
3. 如何设计一个SAS的程序,自动将这1000个数据导入,
并将其取名为原来文件的名字,比如命名为stock600100,stock600073,...的形式。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-4 01:25 , Processed in 0.075988 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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