ラベル filename の投稿を表示しています。 すべての投稿を表示
ラベル filename の投稿を表示しています。 すべての投稿を表示

2010年5月17日月曜日

DDEを利用したEXCEL表読込みのTips

DDEを利用したEXCELの表を取り込む際に
表の行数が何行になっても対応できる方法です。

まず下のような表があり、赤枠の部分を読込みたいとします。



この表をDDEで取り込む場合通常は以下のようにfilenameステートメントを記述します。

filename myxls dde "Excel|[Book1]Sheet1!R2C1:R3C3";

data test;
infile myxls;
input name $ sex $ age;
run;

無事にデータセット化できました。


では下の図のように表に値が追加されていった場合はどうすればよいでしょうか。
filenameの記述を毎回書き換えるのは少し面倒ですよね。


こういう場合はfilenameステートメントを次のように記述しておきます。

filename myxls dde "Excel|[Book1]Sheet1!C1:C3";

R1C1参照の部分を以下のように変更しています。

R2C1:R3C3
↓
C1:C3


SASデータセットに取り込むプログラムは次のように変更します。

data test;
infile myxls firstobs=2;
input name $ sex $ age;
run;

firstobs=2を追加していますね。

無事にデータセット化することが出来ました。



R1C1形式の指定をカラム情報のみにすると指定したカラム範囲の全てのデータを対象にします。
(firstobs=2を追加したのは表の項目ラベルも対象範囲にはいってしまうためです)
こうしておく事でデータが随時追加されていく表に対しても
プログラムの変更なく取り込むことが出来ますので、覚えておくと便利です。

おわり


投稿者:@miya_NI


2010年3月13日土曜日

ZIP形式で圧縮されたテキストファイルを解凍しないで読み込む方法

NESUG(NorthEast SAS Users Group)のサイトに掲載されていました。

よく読むとundocumentedな機能らしいですが・・・

例えば、temp1.csv~temp3.csvのようなCSVファイルがZIP形式でひとつにまとめられたファイルがあるとします。
↓ ファイル名はtemp_all.zipです。


↓ ZIPファイルの中身はこのような感じです。


↓ 例えば、temp2.csvの中身はこのような感じです。


このtemp_all.zipを解凍しないで圧縮されたままの状態で、その中の1ファイルを読み込む方法です。
(ここでは、temp2.csvを読み込みます)

まず、FILENAMEステートメントでZIPファイルをファイル参照名に定義します。
  filename ファイル参照名 saszipam "ZIPファイルの保存場所" ;
例) filename zipfile saszipam "D:\temp\temp_all.zip" ;

ファイルを読み込むDATAステップのINFILEステートメントではこのように指定します。
  infile ファイル参照名 (ファイル名 ) ;
例) infile zipfile(temp2.csv) ;
INFILEステートメントのその他オプションは適時指定します。

↓ まとめるとこのような感じです。


↓ 実行結果のログです。

3オブザベーション、3変数のデータセットが作成されたことが確認できます。

↓ 実際にデータを開いてみました。

きちんと読み込めているようですね。



う~ん、ちょっと使いどころがあまり思いつきませんが・・・
いや、いつか役に立つかもしれません!
こんなこともできるんだなぁぐらいの気持ちで覚えておきましょう!


投稿者:@massu_NI


ネイチャーインサイト サイトリニューアル&NIBLOGの引っ越し

ご連絡が遅くなりましたが、 ネイチャーインサイトの際とがリニューアルしました。 https://www.n-insight.co.jp/ それに伴い、NIBLOGも引っ越しすることになりました。 https://www.n-insight.co.jp/niblog/ ...