When files are uploaded to SAS through either a Viya Job or STP, they are saved to a temporary storage location. You can access it using the macro variable _WEBIN_FILEREF. Since they can upload multiple files, multiple macro variables will be available, and the number of files uploaded is stored in _WEBIN_FILE_COUNT. For example, if they are uploading two files:
_WEBIN_FILE_COUNT = 2
_WEBIN_FILEREF1 = #LN0001
_WEBIN_FILEREF2 = #LN0002
However, if _WEBIN_FILE_COUNT = 1, you will only use _WEBIN_FILEREF:
_WEBIN_FILE_COUNT = 1
_WEBIN_FILEREF = #LN0001
If you want to only process these files, count the number of files using _WEBIN_FILE_COUNT, then run your import code just like any other SAS code:
/* Test values */
%let _WEBIN_FILE_COUNT = 1;
%let _WEBIN_FILEREF = a;
%let _WEBIN_FILEREF1 = b;
%let _WEBIN_FILEREF2 = c;
/* copy: Optional. if YES, copies the file to "outdir"
outdir: Location to copy the uploaded file permanently
*/
%macro read_uploaded_files(copy=NO, outdir=/directory/here);
%local i n;
%let outdir = %superq(outdir);
%let copy = %upcase(©);
%put Total files: &_WEBIN_FILE_COUNT;
/* Read in all the uploaded files and output sequentially to datasets named excelout1, excelout2, etc. */
%do i = 1 %to &_WEBIN_FILE_COUNT;
/* Add a suffix if more than one file was uploaded */
%if(&_WEBIN_FILE_COUNT > 1) %then %let n = &i;
%put Importing fileref %nrbquote(&)_WEBIN_FILEREF&n.: &&_WEBIN_FILEREF&n.;
/* Read the file in to SAS. Comment out for testing. */
proc import
file = &&_WEBIN_FILEREF&n.
out = excelout&i.
dbms = xlsx
replace;
run;
/* Copy the file somewhere to the server permanently */
%if(©. = YES) %then %do;
filename outfile "&outdir./&&_WEBIN_FILENAME&n";
%let rc = %sysfunc(fcopy(&&_WEBIN_FILEREF&n., outfile) );
%end;
%end;
%mend;
%read_uploaded_files;
... View more