2017-04-07 5 views
0

私はwork.Directories.dataの形式でディレクトリのリストを持っています(変数はディレクトリです)。マクロコマンドを使用してデータセット内の複数のディレクトリを検索する

C:\ importantfolder \サブフォルダ私はこれらの各ディレクトリの内容を見つけて、新しいデータセットを作るためにそれらを結合したい

\各行は、次のようになります文字列が含まれています。ここで私はこれまで持っているものです。

%macro ScanDirec(STRING=); 
    filename temptree pipe 'dir "&STRING" /s /b' lrecl=5000; 

    data SmallList; 
     infile temptree truncover; 
     input dirlist $char1000.; 
    run; 

    data BigList; 
     set BigList SmallList; 
    run; 
%mend ScanDirec; 

data SmallList; 
run; 
data BigList; 
run; 

data _null_; 
    set Directories; 
    call execute('%ScanDirectories('||directory||')'); 
run; 

私はいくつかの深刻な問題を取得しますが、私は私のコードはかなり無害に見えると思います。どうした?

+0

の可能な重複が[なぜ私のマクロ変数が解決されません?](http://stackoverflow.com/questions/27946244/why-wont-my-macro-variable-resolve) – Joe

+0

Drattedのdupehammerは」doesnの最初に[tag:sas]が問題になっていないときに働きます。とにかく - OP - あなたのパイプは一重引用符で囲まれています。 – Joe

+1

そして、将来の参考のために - 「いくつかの深刻な問題を抱えて」は本当にわれわれが見たいものではないので、エラーメッセージを見たいと思う。そうでなければ良い質問です。 – Joe

答えて

1

エラーメッセージはかなり簡単です。

1 data test ; 
2  infile 'dir "&STRING" /s /b' pipe truncover; 
3  input dirlist $char1000.; 
4 run; 

NOTE: The infile 'dir "&STRING" /s /b' is: 
     Unnamed Pipe Access Device, 
     PROCESS=dir "&STRING" /s /b,RECFM=V, 
     LRECL=32767 

Stderr output: 
File Not Found 
NOTE: 0 records were read from the infile 'dir "&STRING" /s /b'. 
NOTE: The data set WORK.TEST has 0 observations and 1 variables. 
NOTE: DATA statement used (Total process time): 
     real time   0.99 seconds 
     cpu time   0.04 seconds 

"&STRING"という名前のファイルが見つかりませんでした。

SASにマクロ式を解決させたい場合は、文字列を二重引用符で囲んでください。

"dir ""$STRING"" /s /b" 

マクロを完全に避けてください。

data BigList; 
    set Directories; 
    length cmd $500 ; 
    cmd = catx(' ','dir',quote(trim(directory)),'/s /b'); 
    infile cmd pipe filevar=cmd truncover end=eof; 
    do while (not eof); 
    input dirlist $char1000.; 
    output; 
    end; 
run; 
+0

素晴らしい、私が望むよりも優れています。おかげでTom。 – Prototank

関連する問題