我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

DelphiからSASxptファイルにアクセスする(1)

いつの間にか、CDATAからSAS xptファイルへのアクセスコンポーネントがリリースされていました。


Delphi用のFireDAC Componentもしっかり用意されていた(&バグが修正されたらしい)ので、早速使ってみました。
(2020/10/14時点の最新はVer20.0 Build 7587です。その前のBuild7571にはバグがありますので注意してください)




まずは、CDATAからダウンロードします。

https://www.cdata.com/drivers/sasxpt/download/firedac/へアクセスし、DOWNLOAD BETAをクリックします。
f:id:japelin:20201014233737p:plain

メールアドレスを入力して、DOWNLOADをクリックします。
f:id:japelin:20201014233826p:plain

ダウンロードしたファイルを実行します
f:id:japelin:20201014233923p:plain

セットアップが始まります。ベータ版なので、リリースされた後、12週くらいで使用期限が来るようです。
f:id:japelin:20201014234413p:plain

同意を確認します
f:id:japelin:20201014234641p:plain

インストールフォルダを指定します
f:id:japelin:20201014234624p:plain

インストール対象のDelphiバージョンを指定します。私の環境ではDelphi10.3のみがインストールされているため、10.2と10.4のチェックは外しました。
f:id:japelin:20201014234829p:plain

スタートメニューフォルダを指定し、
f:id:japelin:20201014234841p:plain

インストールをおこないます。
f:id:japelin:20201014234850p:plain


インストールが完了したら、SASでxptファイルを作成します。

data test1;
  array v{100};
  do i=1 to 100;
    do j=1 to 100;
      v{j}=i+j;
    end;
    output;
  end;
  drop i j;
run;

libname out xport 'c:\temp\test1.xpt';
proc copy in=work out=out  mt=data;
  select test1;
run;
libname out clear;

PMDAの技術ガイドにもありますが、xptファイルを作成するためにはcportプロシージャではなく、xportエンジンを使用してライブラリ割り当てしたファイルにcopyする、という操作が必要になります。

作成されたデータセットはこんな感じです
f:id:japelin:20201014235333p:plain




続いて、Delphi側の設定です
新規VCLアプリケーションを作成し、
TFDConnectionをフォームに貼り付けます。

TFDConnectionのドライバIDにはCDataSASXpt、URIにはSAS xptファイルがあるフォルダを指定します。
URIはさながらXPTファイルに対するライブラリのようになるわけです。

さて、TFDConnectionでSQLスクリプトを実行してみます。

select * from test1;

f:id:japelin:20201015001019p:plain
あれれ、やっぱり直ってない(本当は100obsなので109rowsとなっている)

修正Buildはまだだったのかも…


まぁそれは置いておいて、SAS xportファイルなんて当局への提出用以外の用途ってあるんでしょうか。
古いバージョンの仕様を引きずって扱いづらいだけの旧規格、というイメージなんですが。
CDATA使うメリットとしてはデータストアからダイレクトにSAS xptファイル作って提出できるとか?

ぜひとも、CDATAさんにはSASデータセットにダイレクトアクセスできるコンポーネントを優先していただきたいものですお願いします。