SAS と Excel を使用してデモを行っています。画面上のExcel データ をインポートするスクリプトを Base SAS で実行できるようにしたいと考えています。
これは、ネイティブ SAS ルーチンまたは最後の手段として DDE を使用して可能ですか? Excel 2010 と SAS 9.3 を使用しています。
FILELOCKS オプションを使用できます。SAS はロックを無視し、通常どおり処理を続行します。いつもPROC IMPORTで使っています。
options filelocks = ("&workbookdir" NONE);
Base SAS だけでは、Excel ワークブックから読み取ることはできません。SAS Access to PC File Formats 製品 (個別にライセンスされたコンポーネント) を使用すると、SAS はワークブックの最新の「保存された」コピーから読み取ることができます。
proc import datafile='c:\temp\test4sas.xlsx'
out=test
replace;
run;
SAS は Excel アプリケーションから直接読み取るのではなく、ワークブック ファイル自体から読み取ることに注意してください。「自動保存」機能がオンになっている場合、インポートされた SAS データセットには、ワークブックに現在「保存」されているものがすべて含まれます。
サイトで SAS Access のライセンスを取得している可能性があります (ほとんどの Windows サイトではバンドルの一部としてライセンスされています)。確認するには、これを実行して、ライセンスされているすべての製品を表示します。
proc setinit;
run;
ここでは DDE が最善の策だと考えてください。次のコードでうまくいくはずです (必要に応じて変更してください)。
filename xlSheet1 dde "Excel|C:\Location_of_excel_file\[demo.xlsx]Sheet1!R2C1:R40C2";
data mydataset;
infile xlSheet1 dlm='09'x notab dsd missover;
input var1:$15. var2:$15.;
run;
ここでは、画面上のデータに対して DDE が最も明白なソリューションになると思います。私は DDE の専門家ではありませんが、DDE が現在実行中の Excel プロセスと対話することによって動作することを考えると、実際には非推奨ではないにしても、その欠点と効果的であるにもかかわらず、結果に合わせて作成されているように見えます.
別の合理的な解決策は、画面上のデータを CSV にエクスポートするマクロを作成し、その CSV をインポートする SAS ルーチンを呼び出すことです。VBA から (他のプログラムと同様に) SAS を呼び出すことができるため、Excel ワークブックに統合されます (これが多くのワークブックからのものである可能性がある場合は、マクロを個人のワークブックに入れるか、使用する必要がある場合は .xlsm を持ってきてください)。他人のコンピュータ)。これはおそらく私がすることです。
最後に、SAS Add-in for Excel があります。 http://support.sas.com/documentation/onlinedoc/addin/index.html 私はそれを使った経験はありませんが、[正確な詳細が何であるかに応じて] 必要なことを実行できる可能性があります。
私はそれほど注意を払っていませんでしたが、しばらくの間、それができなかったようですが、今では Excel で開いているファイルで Proc Import を使用できるようになりました。ただし、スプレッドシートを読み取り専用モードで開いた状態で別のバージョンの Excel を開くこともできます。そうならなければいいのにと思い、この投稿にたどり着きました。問題があるかどうかはわかりませんが、PC ファイル サーバー エンジンを使用してワークシート (DBMS=EXCELCS) を読み取っています。
注: http://support.sas.com/kb/15/547.htmlは、ファイルが閉じているのではなく開いている場合、SAS が異なる結果を得ることができると述べています。スプレッドシートが開いている場合、ワークシートが閉じている場合とは異なるタイプとして列が読み取られるという経験がありました。