SAS中文论坛
标题:
import多个csv文件并合并
[打印本页]
作者:
shiyiming
时间:
2010-5-4 14:53
标题:
import多个csv文件并合并
我有几十个csv datasets,名字均为G_I_xxxxxx,xxxxxx部分为数字,数字不连续。请问怎么能方便的导入所有的csv文件并合并成一个file?我现在每一个dataset用一个import语句:
PROC IMPORT OUT=G_I200611
DATAFILE= "f:\G_I200611.csv"
DBMS=CSV REPLACE;
GETNAMES=yes;
DATAROW=2;
GUESSINGROWS=20;
RUN;
即使用macro的话还是要分别输入input和output file name,然后再合并,不知道有什么简便的方法可以一次实现?
谢谢!
作者:
shiyiming
时间:
2010-5-4 18:39
标题:
Re: import多个csv文件并合并
用宏来实现
我发消息你
作者:
shiyiming
时间:
2010-5-8 16:48
标题:
Re: import多个csv文件并合并
to tianwild
我也遇到同样问题,可以发一份给我吗?
作者:
shiyiming
时间:
2010-5-8 22:05
标题:
Re: import多个csv文件并合并
难度是在读取文件夹下的文件名,参考如下(PS:也是以前某个大侠写的):
[code:1iuw7q91]data dn(keep=memname prefix postfix);
rc=filename("mydir","&path");
did=dopen("mydir");
memcount=dnum(did);
do i=1 to memcount;
memname=dread(did,i);
end;
*--截取文件的前缀后后缀--;
prefix=scan(memname,1,".");
postfix=scan(memname,-1,".");
run;
[/code:1iuw7q91]
文件名获取了,再赋值宏变量,循环读取即可!其余的你写写看!
作者:
shiyiming
时间:
2010-5-9 08:43
标题:
Re: import多个csv文件并合并
小弟也遇到了同样的困窘,先谢过各位大吓. <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者:
shiyiming
时间:
2010-5-9 11:53
标题:
Re: import多个csv文件并合并
To tianwild:
请问具体应该怎么用宏合并这些CSV文件呢?麻烦您指教 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者:
shiyiming
时间:
2010-5-9 13:25
标题:
Re: import多个csv文件并合并
版本1: 鸣谢tianwild的赞助
[code:lo5954wi]%macro import1(path,out_ds);
options nomprint nosymbolgen;
%if %sysfunc(exist(&out_ds)) %then
%do;
proc datasets library=work nolist;
delete &out_ds;
quit;
%end;
%let filrf=mydir;
%let rc=%sysfunc(filename(filrf,&path));
%let did=%sysfunc(dopen(&filrf));
%do i=1 %to %sysfunc(dnum(&did));
%let memname=%sysfunc(dread(&did,&i));
%if %upcase(%scan(&memname,-1,'.'))=CSV %then
%do;
proc import out=_temp datafile="&path\&memname" dbms=csv replace;
getnames=yes;
datarow=2;
run;
data _temp;
length In $200;
set _temp;
in="&memname";
run;
proc datasets library=work nolist;
append base=&out_ds data=_temp;
quit;
%end;
%end;
%let rc=%sysfunc(dclose(&did));
proc datasets library=work nolist;
delete _temp;
quit;
%mend;
%import1(D:\test,out1)[/code:lo5954wi]
版本2
[code:lo5954wi]%macro import2(path,var_list,out_ds);
options nomprint nosymbolgen noxwait xmin;
%macro inner(fname);
data _temp;
length In $200;
infile "&path\&fname" firstobs=2 dlm=',';
input &var_list;
in="&fname";
run;
proc datasets library=work nolist;
append base=&out_ds data=_temp;
quit;
%mend;
%if %sysfunc(exist(&out_ds)) %then
%do;
proc datasets library=work nolist;
delete &out_ds;
quit;
%end;
x "cd &path";
x "dir :attrib *.csv /o:-d/b >filename.txt";
data _null_;
length filename $200;
infile "&path\filename.txt" truncover;
input filename $1-200;
call execute('%inner('||trim(filename)||')');
run;
x "del filename.txt";
proc datasets library=work nolist;
delete _temp;
quit;
%mend;
%import2(d:\test,x y,out2)[/code:lo5954wi]
版本3
[code:lo5954wi]%macro import3(path,var_list,out_ds);
options nomprint nosymbolgen noxwait xmin;
x "cd &path";
x "dir :attrib *.csv /o:-d/b >filename.txt";
data &out_ds;
length filename $200;
infile "&path\filename.txt" truncover;
input filename $1-200;
filename=cats("&path\",filename);
do until(last);
infile CSV filevar=filename end=last firstobs=2 dlm=',';
input &var_list;
In=filename;
output;
end;
run;
x "del filename.txt";
%mend;
%import3(d:\test,x y,out3)[/code:lo5954wi]
作者:
shiyiming
时间:
2010-5-9 13:31
标题:
Re: import多个csv文件并合并
[quote="hopewell":38ue7tsf]版本1:...\test,x y,out3)[/quote:38ue7tsf]
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> 大侠...
作者:
shiyiming
时间:
2010-5-9 17:11
标题:
Re: import多个csv文件并合并
逛了论坛里的好多解法,整合了一个,当然是翻版各位大师的 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
[code:khqybusw]*--定义一个文件路径;
%let Path=%str(F:\Myfile);
*--读取文件路径的文件名,并以Memname变量保存;
data Filena(keep = Memname Prefix);
Rc = filename("mydir","&Path");
Did = dopen("mydir");
Memcount = dnum(did);
do i = 1 to Memcount;
Memname = dread(Did,i);
Prefix = scan(Memname,1,".");
Postfix = scan(Memname,-1,".");
output;
end;
run;
*--编写宏实现导入数据;
%macro Import_data(Prefix =);
proc import datafile = "&Path.\&Prefix..csv"
out = &Prefix
dbms = csv
replace;
getnames = yes;
run;
%mend;
*--调用宏,将文件导入;
data Exe_Import;
set Filena;
call execute('%Import_data(prefix='||Prefix||')');
run;
[/code:khqybusw]
此程序可以不用对路径下的文件进行命名,直接用原来的文件名.
作者:
shiyiming
时间:
2010-5-9 17:15
标题:
Re: import多个csv文件并合并
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> 合并这些数据集hopewell大虾也可以提供几个Editions嘛.
作者:
shiyiming
时间:
2010-5-10 15:20
标题:
Re: import多个csv文件并合并
take it easy.
SAS is stupid on files handling. let's use DOS.
x 'copy f:\G_I_*.csv f:\mybig.csv';
*your proc import for f:\mybig.csv;
作者:
shiyiming
时间:
2010-5-10 15:30
标题:
Re: import多个csv文件并合并
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者:
shiyiming
时间:
2010-5-11 12:44
标题:
Re: import多个csv文件并合并
<!-- s:!: --><img src="{SMILIES_PATH}/icon_exclaim.gif" alt=":!:" title="Exclamation" /><!-- s:!: --> <!-- s:!: --><img src="{SMILIES_PATH}/icon_exclaim.gif" alt=":!:" title="Exclamation" /><!-- s:!: -->
作者:
shiyiming
时间:
2012-7-22 21:41
标题:
Re: import多个csv文件并合并
Mark
欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/)
Powered by Discuz! X3.2