2017-06-21 7 views
-1

私は比較的新しいSASユーザーですので、私にご負担ください!(sas)は異なるフォルダから複数のファイルを連結します

私はそれぞれが同じ順序で同じ変数を含む一意の名前のxlsファイルを含む63のフォルダを持っています。私はそれらを1つのファイルに連結する必要があります。私が試したコードのいくつかを掲載しますが、信頼してください、それはひどく間違っていて、まったく役に立たないです。以下は基本的なライブラリ構造は、しかし、libnameに文である:

`libname JC 'W:\JCs\JC Analyses 2016-2017\JC Data 2016-2017\2 - Received from JCs\&jcname.\2016_&jcname..xls` 

(63のユニーク& jcname値がある)

任意のアイデア?

ありがとうございます!!!

+0

あなたの質問がSOのガイドラインを満たしていないため、これまでに試したことを示してください。 https://stackoverflow.com/help/how-to-ask – Reeza

+0

1つのExcelファイルをインポートするためのコードがありますか?もしそうなら、それを示してください。 &jcnameをパラメータとし、1つのExcelファイルを読み込むマクロを試しましたか?もしそうなら、それを示してください。一度それを持っていれば、63の名前のリストの上にマクロループを作ることはそれほど多くはありません。コードを表示すると、他の人があなたを助けるのに役立ちます。 – Quentin

+0

私は上記のコメントに同意しますが、これは広い質問ですが、回答はまだ有用であると主張します。このサイトでは良い回答はないようですが、同様の問題の検索結果からはいくつかの概略的な回答が得られます。これはSASの今日の問題ではなく、基本的なアプローチでさえSASプログラマを始めるには慣れていません。それはまだ私を止めると思う。 – david25272

答えて

1

これは一般的な要件ですが、うまく実行するには、複数のSAS関数についてはまれな知識が必要です。

私は2つのステップのソリューションを使用してこの問題にアプローチしたい:あなたは、各ファイル名を処理することができますが

  1. はループ

に各ファイル名のファイル名

  • プロセスのリストを取得します。それを読んで、これらのステップを分離するコードをデバッグして維持する方がずっと簡単です。

    ステップ1:読むファイル名

    私はファイル名のリストを取得するための最良の方法は、以下のようにデータセットに ディレクトリエントリを読み取るためにdread()を使用することだと思う。この後

    filename myfiles 'c:\myfolder'; 
    
    data filenames (keep=filename); 
        dir = dopen('myfiles'); 
        do file = 1 to dnum(dir); 
         filename = dread(dir,file); 
         output; 
        end; 
        rc = dclose(dir); 
    run; 
    

    を適切なファイル名が読み取られたことを確認して、データセットを印刷することができます。特定の種類のファイルのみを出力するようにコードを変更することもできます。私はこれを読者のための練習として残す。

    手順2:データセットの名前のリストを与えられたファイル

    を使用し、私は、各ファイルを処理するために、データのステップ内call execute()を使用することを好みます。

    data _null_; 
    set filenames; 
    call execute('%import('||filename||')'); 
    run; 
    

    私は(私がテストするためにExcelファイルを、適切なリストを持っていない理由の一つが、また、それは、状況の問題だから)Excelファイルを読み込み、データセットを連結するマクロを含めていません。

    %macro import(filename); 
        /* This is a dummy macro. Here is where you would do something with the file */ 
        %put &filename; 
    %mend; 
    

    注:

    は間違いなく、多くは上の複数の場所でこれを行う方法の多くの例がありますされているだけで、それが実行していることを確認するために、ログにファイル名を出力し、以下のスタブマクロウェブ、例えば:

    しかし、それらのほとんどはdirまたはlsコマンドを実行するpipeの使用に依存し、Iプラットフォームが依存しているために感じが間違ったアプローチであり、多くの現代の環境では、シェルコマンドをパイプする機能が無効になります。

    私はこれをDaniel Santosの回答communities.sas.comに基づいていますが、stackoverflowの優れた機能性を考えれば、ここでは良い答えが得られるはずです。

  • +0

    マクロのドキュメントの例1と2で十分です。 https://communities.sas.com/t5/SAS-Communities-Library/SAS-9-4-Macro-Language-Reference-Has-a-New-Appendix/ta-p/291716 – Reeza

    関連する問題