楼主: rockdj1998
2459 4

问个宏的问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

50%

还不是VIP/贵宾

-

威望
0
论坛币
679 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
355 点
帖子
22
精华
0
在线时间
15 小时
注册时间
2005-11-2
最后登录
2022-12-23

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

怎么利用宏功能一次性导入多个数据文件呢?

比如我有成千上百个dbf格式的数据 我该怎么做呢?

二维码

扫码加我 拉你入群

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

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

关键词:数据文件 怎么做 一次性 dbf 宏功能

沙发
beatuxlee 发表于 2006-12-15 16:36:00 |只看作者 |坛友微信交流群

%macro import;

%do i=1 to 1000;

proc import ...&i ;

run;

proc append ...;

%end;

%mend;

在IMPORT语句设置好数据库,源文件采用数字命名,如a1,a2;再用append过程合并;也可用SQL语句完成.

无为有之始

使用道具

藤椅
rockdj1998 发表于 2006-12-15 19:37:00 |只看作者 |坛友微信交流群

多谢!由于我的dbf是往年的股票高频数据,因此不能用import过程来导入,因此我只能使用access,按道理也应该一样,我的代码如下,可问题在于我新建的数据集文件没法逐个命名,

我全选文件夹内所有的文件然后用同一个字母命名,会得到诸如a(1),a(2),a(3)……的文件名,

%macro massimport;


%do n=1 %to 242;

proc access dbms=dbf;
create work.d&n.access;
path="d:\coco\a (&n).dbf";
assign=yes;
create work.d&n.view;
select all;
subset where delete_f=' ';
%end;

%mend massimport;
%massimport;
run;

具体出了如下的问题,说我的数据集名取得太长了,我初学sas感觉命令凌乱十分棘手,希望高手再次指点!

ERROR: Invalid name. Syntax is lib.mem.<ACCESS or VIEW>, lib and mem can be up to 8 chars only.
ERROR: In CREATE processing, all subsequent statements rejected.


[此贴子已经被作者于2006-12-15 19:57:45编辑过]

使用道具

板凳
rockdj1998 发表于 2006-12-15 22:28:00 |只看作者 |坛友微信交流群

对了 我用import尝试了一下其他的文件类型比如excel,发现居然可以

用access就会出错

使用道具

报纸
matlab-007 发表于 2015-7-13 09:36:49 |只看作者 |坛友微信交流群
可以用excel
1、首先,确定如何如何读入EXCEL中SHEET。
2、根据EXCEL中的SHEET的数量使用一个循环来读入数据。
主要用到的几个过程为:
一、libname 库名 EXCEL 地址
这是一个很实用库建立过程,这个改天写篇短博来讨论。
1、通过libname 库来引入某个EXCEL中的所有 SHEET 数据。
2、按每sheet会对应在库下生成一个数据集
二、数据字典
   在SAS中有Dictionary Tables 存储了系统相关设置各个库现表字段的相关信息  相当于一个元数据的元数据。
1、在SAS会话开始的时候创建。
2、vstabvw存储了每个库的内容:表名、类型。
三、宏
  1、通过宏来实现这个过程,EXCEL的名字作为参数似入到宏程序中。
  2、注意间接引用宏的时候要注意。


下面提如何通过宏脚本来实现批量导入EXCEL数据到SAS中。
%let dir=C:\demo;
%macro ReadXls (name);
libname excellib excel "&dir.\&name";
proc sql noprint;
create table sheetname as
select tranwrd(memname, "''", "'" ) as sheetname
from sashelp.vstabvw
where libname= "EXCELLIB";
select count(DISTINCT sheetname) into :number
from sheetname;
select DISTINCT sheetname into :sheet1 - :sheet% left(&number)
from sheetname;
quit;
libname excellib clear;
%do i=1 %to &cnt_sht;
proc import datafile= "&dir.\&name"
out=sheet&i replace;
sheet= "&&sheet&i";
getnames=yes;
mixed=yes;
run;
proc append base=master data=sheet&i force;
run;
%end ;
%mend ReadXls;
%ReadXls (test.xls)

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-23 19:30