SAS 将文件自动导入,并自动获取文件名
来源:互联网 发布:最快的网络借款 编辑:程序博客网 时间:2024/05/02 15:39
这个是我最近解决的问题,欢迎大家批评指点哈!
概述:SAS 可以用input,在指定column 名字的情况下,load数据;可以用proc import 来导入未知column个数的数据,他会自动生成每一列的格式,但有个弊端,就是针对空的列,他会assign char的格式,如果我要append同样格式的文件到第一个文件,第二个文件中那个列不为空,这时,就会出现问题。
下面的方法可以解决,把多个格式一样的数据,load到sas的一个表中,而且可以自动提取表名。
/*summary of the macro variables
Used for Comma delimited csv files.
num -- how many columns in the file
filename -- file name you want to do the qc and summary(including file location*/
%macro infiledata(filename);
proc import datafile="&filename" out=aa replace dbms=csv;
run;
******get the the quantity of the column***********;
%let dsid=%sysfunc(open(aa),i);
%let num=%sysfunc(attrn(&dsid,nvars));
%let rc=%sysfunc(close(&dsid));
%macro importfile(n);
data b0;
infile "&filename"delimiter=',' MISSOVERDSD lrecl=32767firstobs=2 ;
length value1-value&n $ 200;
input value1-value&n $ ;
RUN;
%mend importfile;
%importfile(&num);
********get the column name and the location of the column*******;
proc contents data=aa out=o1(keep=varnum name);
run;
data _null_;
set o1 (keep=name);
call symputx('rc','1');
where upcase(name)="%upcase(mailing_key)";
run;
%macro insertv(n,name);
%do i=1 %to &n;
%let j=%eval(&i-1);
proc sql;
select distinct name
into: v&i
from o1
where varnum=&i;
QUIT;
data b&i;
set b&j;
rename &name&i=&&v&i;
run;
proc sql;
drop table b&j;
quit;
%if &i=&n %then %do ;
data work.tempwavetables;
set b&i;
run;
proc delete data= b&i;run;
%end;
%end;
%mend insertv;
%insertv(&num,value);
%macro append();
proc sql;
insert into work.wavetables
select "&filename" as file_name format=$200.
,*
from work.tempwavetables tab;
quit;
proc delete data= work.tempwavetables;
run;
%mend append;
%MACRO check(filename);
%if %sysfunc(exist(work.wavetables)) %then %do;
%append();
%end;
%else %do;
Proc sql;
CREATE table work.wavetables as
select "&filename" as file_name format=$200.
,*
from work.tempwavetables;
quit;
Proc sql;
alter table work.wavetables
modify file_name char(200);
run;
proc delete data= work.tempwavetables;
run;
%END;
%mend check;
%check(&filename);
*%drop temp tables;
proc sql;
drop table out;
quit;
proc sql;
drop table aa;
quit;
%mend infiledata;
%macro runmc(n);
%if %length(%scan(&&file&n,1,'|'))>1 %then %do;
%infiledata(filename=&&file&n);
%end;
%mend runmc;
%runmc(1);
%runmc(2);
%runmc(3);
%runmc(4);
%runmc(5);
run;
0 0
- SAS 将文件自动导入,并自动获取文件名
- 强大的 将XML文件的数据导入到数据库的 程序 只需输入xml文件名即可自动创建
- 上传文件,并获取文件名
- 通过SAS宏实现自动导入批量数据
- matlab批量修改文件名并自动保存
- c# 获取FTP文件,并将数据导入ORACLE数据库
- 自动生成控制文件及数据文件并完成sqlldr的自动导入
- [原创]Loadrunner下载文件,并自动生成不重复的文件名
- SAS 批量导入文件
- pb 自动打开指定文件名的文件
- java获取并编辑用户脚本,创建并自动执行testng.xml文件_03
- SAS 多个文件导入
- Java获取时间并将时间格式化输出以为文件名
- bat脚本自动扫描制定文件夹下shp文件,并导入数据库,然后执行空间操作
- 自动创建数据库并按顺序导入sql文件的shell脚本
- 简单自动获取文件编码
- 将文件夹中的所有文件名导入一个文件
- 将ipdata.dat 数据集导入 mysql 中并获取sql文件
- 黑马程序员——Java语言基础——07.IO流(1)字符流和字节流
- 查看文件的glibc版本要求和内核版本要求
- Qt编译mysql以及创建表后进行导入操作
- c++调用静态方法
- [WINFORM]错误日志源码
- SAS 将文件自动导入,并自动获取文件名
- 20141219
- 转载:C++ socket编程MFC CAsyncSocket
- 偶尔看到刘涛涛的一个题,试着做了下(C语言实现)
- 使用SDL1.2版本的 同学注意了,SDL2.0版本的变动
- LEETCODE: N-Queens
- [001]不高兴的津津 [EASY]
- iphone
- PHP逐行输出(obflush与flush的组合)