sas - 具有可变部分的 SAS 文件路径
问题描述
我正在尝试遍历不同文件的列表并输入它们。
DO Year = 2000 to 2021 by 1;
filename fileftp ftp year+'.csv.gz' host='ftp.abcgov'
cd='/pub/' user='anonymous'
pass='XXXX' passive recfm=s debug;
INFILE fileftp NBYTE=n;
END;
我如何获得它以便将那一年包含在文件名中?目前,当我尝试这个(year+'.csv.gz'
)时,它试图错误地将年份识别为一个选项。
解决方案
为此,您需要使用 SAS 宏工具。由于您的文件已压缩,因此您还需要在导入数据之前将其解压缩。
%macro importData;
%do year = 2000 to 2021;
filename fileftp ftp "&year..csv.gz"
host = 'ftp.abcgov'
cd = '/pub/'
user = 'anonymous'
pass = 'XXXX'
recfm = s
passive
debug
;
filename download temp;
/* Download the file to a temporary local space */
%let rc = %sysfunc(fcopy(fileftp, download));
/* Unzip the file */
filename unzip "%sysfunc(pathname(download))" gzip;
/* Read the data and output it by year */
proc import
file = unzip
out = want&year.
dbms = csv
replace;
run;
%end;
%mend;
%importData;
如果fcopy
不适合您,您可以使用数据步骤将一个文件写入另一个文件。
data _null_;
infile fileftp;
file download;
input;
put _INFILE_ ;
run;
推荐阅读
- javascript - Javascript:承诺立即返回,而不是等待异步进程完成
- android-recyclerview - 首次加载列表与重新加载时,notifyItemInserted 与 notifyItemChanged 有什么区别?
- android - 错误:onFailure:com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: 应为 int 但为 57213780054
- android - “使用其他帐户”登录时,Google 登录不返回任何结果
- sql - NODE JS MS Sql Dosnt 未连接到 msql ip
- r - 如何避免将数值强制转换为 R 中的 NA
- audio - 将 G.723.1 转换为普通 wav 和拆分通道?
- c# - c# Entity Framework 6 on delete cascade one to many
- python - 如何在搜索文本时打印 n 个上下文单词
- vba - 提示用户一次但将结果应用于多条消息的规则?