如果我指定确切的文件名,我就能从FTP位置读取文件。我的问题是,我试图自动执行此过程,因此我必须每周读取这些文件,并且文件名会随机更改。没有特定的模式,因此无法预定。
SAS中有一种方法可以读取FTP位置上存在的所有文件的名称,并为用户提供一个包含此信息的对话框,以便他们输入要读取的文件名。
答案 0 :(得分:0)
在SAS Display Manager界面中,您可以使用数据步骤WINDOW
或宏%WINDOW
语句来定义简单的选择器,并使用DISPLAY
或%DISPLAY
来引发它。简单的选择器非常简单,没有滚动条或其他现代装饰。
使用文件名FTP
引擎选项LS
检索FTP文件夹列表
示例代码:
/**/
* location of FTP folder;
filename folder ftp
user = 'anonymous'
host = 'ftp.cdc.gov'
cd = '/pub/Health_Statistics/NCHS/Publications/ICD9-CM/2011'
ls
;
* retrieve listing;
data files;
infile folder;
input;
order + 1;
fileinfo = _infile_;
run;
/**/
%macro picker(
/* Dynamically build a %WINDOW definition, display it and return the last selected item */
name=, /* Name of window */
title=, /* First line text */
data=, /* data set containing items */
order=order, /* variable for ordering items in the picker*/
item=, /* variable to pick a value of */
result= /* name of macro variable that will contain the picked item, must pre-exist in caller scope */
);
%* field definitions will look like
%* #2 @2 field<i> 1 color=blue attr=rev_video " &filename<i>" ;
%local n i row field_def;
proc sql noprint;
select count(*) into :n trimmed from &data;
%do i = 1 %to &n;
%local field&i item&i;
%end;
select
&order, &item
into
:order1-, :item1-
from
&data;
quit;
%do i = 1 %to &N;
%let field_def = &field_def #%eval(&i+1) @2 field&i 1 color=blue attr=rev_video " &&item&i";
%end;
%WINDOW PICKER rows=30 columns=80
#1 @1 "&title. - Mark an item and Press F3"
&field_def
;
%display PICKER;
%do i = 1 %to &N;
%if %length(&&field&i) %then %let &result=&&item&i;
%end;
%mend;
%let selected=;
%picker(name=PICKER, title=Pick a file, data=files, item=fileinfo, result=selected);
%put &=selected;
可以使用SAS / AF构建更复杂的选择器。其他可能性包括“存储过程”提示对话框,SAS Studio片段或SAS服务器页面。