【发布时间】:2015-07-01 18:30:55
【问题描述】:
我正在尝试在 SAS 中构建一个循环来上传多个文件,并且遇到了一些需要解决的问题。当前代码:
%Macro Weatherupload(File=, output=);
proc import datafile = &File;
out = &output;
dbms=dlm replace;
delimiter= ",";
getnames=yes;
guessingrows = 1000;
run;
%Mend Weatherupload;
%Macro WeatherPrepare(input=, output=);
data &output (keep=Wban_Number _YearMonthDay DewPoint Temp _Avg_Dew_Pt _Avg_Temp year month day);
set &input;
DewPoint = Input(compress(_Avg_Dew_Pt,"*"), 3.);
Temp = Input(compress(_Avg_Temp,"*"), 3.);
year = (_yearmonthday - mod(_yearmonthday, 10000))/10000;
month = ((_yearmonthday - mod(_yearmonthday, 100)) - (_yearmonthday - mod(_yearmonthday,10000)))/100;
day = mod(_yearmonthday, 100);
drop _Avg_Dew_Pt _Avg_Temp _YearMonthDay;
run;
%Mend WeatherPrepare;
data temperatures;
do i = 1999 to 2015;
do j = 1 to 12;
name = 'C:\Users\DILLON.SAXE\Documents\'||i||j||'.tar'||' \'||i||j||'daily.txt';
output = i||j||'weather';
final = i||j||'final';
%Weatherupload(File=name, output=output)
%WeatherPrepare(input=output, output=final)
end;
end;
run;
目标是遍历多个文件夹中的多个文件,按月 + 日 + 其余标题列出,并(目前)从中上传两个数据变量。稍后我会想添加合并文件,并做一些更多的数据工作,但目前是宏问题和上传阻碍了它。
有没有办法在循环中使用 proc 上传,或者在循环中使用另一个数据步骤?
我收到错误“比(某物)更多的位置变量”(我忘记了确切的错误,但它列出了位置变量)。我尝试在宏中添加和删除逗号,但无法摆脱这个错误。有什么想法吗?
【问题讨论】:
-
没有我熟悉的proc上传。
-
@Reeza PROC UPLOAD 是 SAS/Connect 的一部分。它不再被广泛使用。
-
上传到哪里? SAS 服务器、ftp、http?
-
您的 WeatherPrepare 宏似乎对从 CSV 文件导入的表中的字段名称进行了假设。如果您知道 CSV 文件的结构,那么您应该使用数据步骤而不是 PROC IMPORT 来读取它们。这将避免 PROC IMPORT 不得不猜测你的变量是什么而引起的许多麻烦。