web-dev-qa-db-ja.com

SASコーディングの「ベストプラクティス」は存在しますか?

職場では、最初から最後まで、SASで多くのアプリケーションを開発しています。このアプローチの問題の1つは、SASが非常に冗長な言語であり、言語構成が非常に少ないことです。変数のサポートは限定的であり、基本関数のサポートは限定的であり、クラスなどはありません。 。それらには、「マクロ」と呼ばれる概念があり、基本的にテキスト置換であり、マクロを定義し、呼び出し時に、それは単にマクロの内容をドロップします。

私の質問は、SASアプリケーションの開発で使用するための「コーディングのベストプラクティス」に精通している人はいますか?SASのソフトウェア設計パターンはありますか?私はコードコンプリートを経験しました。書き込みはSASに適用できますが、SASには概念が存在しないため、SASには適用できません。保守しやすく、適切に設計されたSASコードを書くための推奨事項を誰かに提供できますか?

4
eykanal

私はいくつかのSAS=システムのユーザー側にいますが、率直に言って、あなたの説明が私を少し驚かせることはありません。私はかなりのギャッププログラミングを行って、 SAS彼らが持っていたコードは編集またはデバッグが困難であったと報告しました。

あなたが言及する障害を考えると、ベストプラクティスは、システムの制限を認識し、言語レベルで問題を分離することから生じます。具体的には:

  1. 最初にコメント、2番目にコード、最後にコメント実行している場合OOP TDDの場合は、すぐにプロトタイプのコーディングを開始してから、テストを実行します。その後、よりクリーンなコードにリファクタリングします。SASではそれを行うことはできません。代わりに、コードを記述する前に、コードに何を実行させるかを決定します。次に、コードを記述します。次に、コメントを編集して、コメントが正確であることを確認します。

  2. 言語機能を取り入れます。マクロは、特定のデータソースへの接続や個別の機能の実行など、プログラム間で単純なコードブロックを共有するための優れた方法のようです。適切な関数呼び出しほど良くはありませんが、何もしないよりはましです。

  3. Do n't make SAS do do other technology can get better。 SQLサーバーにデータを送信していて、テーブルをアーカイブする必要がある場合は、SQLサーバーに処理を任せる。クライアント側プログラムのオプションとしてデータを入力する場合は、XMLなどの一般的な形式で行を送信し、クライアント側プログラムが内部のセグメンテーションについて心配するようにします。

  4. SASはサポートしていません。であるモデルを強制しないでください。==クラスがないと、OOPを実行できないので、しないでください。SASは、いずれにせよ、一連の別個のスクリプトまたは旧式のメインフレームプログラムに近いものです。

  5. シンプルは複雑よりも優れています。あなたのSASプログラムは、可能であれば、1つのことだけを行う必要があります。クライアントシステムからデータをプルします。統計を計算します。計算されたデータを保存します。計算されたデータをレポートとしてフォーマットします。これらのそれぞれステップを1回限りのマクロに強制する必要がある場合でも、ステップはSEPARATEプログラムファイルである必要があります。

  6. 賢くはいけない。 SASは、データソースのポリグロットからプルし、フォーマットのビザンチン配列にエクスポートする不可知論的なメタ言語です。いくつかの不明瞭なフォーマットまたはレガシーフォーマットにアクセスする必要がある場合は、これで十分です。 、しかし、少なくともデータソースを最適化してデータをより迅速に生成する余地を残さずにSASの内部機能にジャンプした場合、問題が発生するだけです。

  7. すべてではない。 SASは、企業全体のデータの集計と分析のための優れたツールのように見えます。しかし、メールプログラムやクライアント側のようなものにとってそれを恐ろしくするために、それを価値あるものにする同じ機能カスタム電卓。

私はSASを直接操作したことがありません。それ以外の場合は、より具体的な情報を提供します。しかし、SASであるという悪化が原因で、 SASはニッチ言語であり、ニッチ言語以外では使用しないでください。ニッチ言語であることには何の問題もありません。RegExとXSLTはどちらも同じです。ニッチ言語、そしてそれらは私のお気に入りの2つですが、チームがすべてに「SASを使用する」ように指示されたときのPHBの匂いです。

6
DougM

SASは、GUIアプリケーション、ETLルーチン、リスクモデリングアプリケーション、そしておそらく私が考えていない他のことについて話しているかもしれない巨大な製品であるため、これは要約で答えるのは難しいです。

とは言っても、グーグルでこの古典的な舌のような紙をめくるでしょう: プログラミングのジョブセキュリティの再考:不可欠性を最大化するためのさらに多くのヒントとテクニック (pdf)。

これは、避けるべきことの優れたガイドです。

アプリケーションがまったくETLっぽい場合は、 1年前に書いたこのブログ投稿 を参照してください。

0
Roy Pardee

はい、ベストプラクティスが存在し、実務家の間で広く知られています。 (そのうちの1つ)。一部はPHUSEによってwikiに書き留められています。 http://www.phusewiki.org/wiki/index.php?title=Good_Programming_Practice_Guidance

実際にSASは非常にオブジェクト指向です。しかしオブジェクトはデータテーブルです。オブジェクトはメタデータを保持し、操作できます。より正式なビューについては、Chambersの「データによるプログラミング」を参照してください。テーブルをオブジェクト化するための同じ設計目標と正当化の多く。

1 procステップ

SASには2つの部分があります-高レベル-ドメイン固有-分析用のprocとほとんどすべての統計モデリング。これらには(はい、詳細)インターフェースがあります。しかし、デフォルトは適切で、答えを簡単に得ることができます。たとえば、Fortran、C、C++、またはJavaで単純な階乗ANOVAをプログラミングしてみます。

2データステップ

そして、パート2は低レベルのデータ操作言語であり、SQLに先行しており、確かに順次的ですが、非常に高速です。これには、作成したプログラムが任意のサイズのデータ​​セット(ディスク容量によってのみ制限されます)またはテープがある場合はテープの数によって実行されるという特性があります。これは、私が言及したすべての言語や、ほとんどの統計パッケージとも異なります。 (例:R、Revolution Analyticsのエンタープライズビッグファイルパッケージなし)。

そこにマクロ言語が適合します。

3ただし

新しいツールがここにあり、これらは永続化できるハッシュオブジェクトと、コードデータステップとプロシージャステップをカプセル化できるプロシージャFCMPです。値や行列を呼び出し元に返すことができます。詳細と参照、および実際のケーススタディでのハッシュオブジェクトの評価については、こちらの私の論文を参照してください。

http://www.phusewiki.org/docs/2012/PAPERS/CS/CS05.pdf

0
DaveG