SAS-从FTP位置读取特定文件

时间:2018-11-28 13:04:26

标签: ftp sas

如果我指定确切的文件名,我就能从FTP位置读取文件。我的问题是,我试图自动执行此过程,因此我必须每周读取这些文件,并且文件名会随机更改。没有特定的模式,因此无法预定。

SAS中有一种方法可以读取FTP位置上存在的所有文件的名称,并为用户提供一个包含此信息的对话框,以便他们输入要读取的文件名。

1 个答案:

答案 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服务器页面。