The Nameless City

何故か製薬やSAS関連のブログ、の予定。

SAS開発環境に、Atom Editorを使うことのとりとめないメモ。

SASIDEと呼べるのは、SAS謹製しかない。

WDSとかは置いておいて。University Editionは商業利用出来ないし。
コードエディタとしてはSAS DMSの他、SAS Drug Developmentの~とかSAS Studioとかあるが、如何せんライセンスの問題もあるし、何より、SAS Intelligence Platformのサービスが立ってないと動かんものが多い。で、これは、起動前のクレデンシャルの問題とかをどうするか決めておく必要があるし(AD連携は可能なんだけど)、実行結果を貰う側がどうやって貰うかも考えておく必要があり、それも含めて今はSAS謹製のものを利用する以外はあんまり解がない状況ではある。


Eclipseプラグインとかは、AppDev Studioのライセンスにくっついて来た。あんまり深くは調べていないが、JavaからSASを呼べる・使えるというところで、多分これもSAS Intelligence Platformが必要だなあと。しかもJava用であり、SASをそのまま実行させる用ではない。。。。。。


結論としては、あくまでも他のアプリ使うのは、エディタの範囲までかなと思う。
同一マシンにおけるなら、SAS入れたサーバにリモート実行しかけることができるなら、バッチ実行までは大丈夫だけど、sshみたいな仕掛けがWindowsの標準ではかなり穴が開いてないのもあって難しいしわかりづらい。PowerShellで出来るんだけどさ。。。。。。psexecはハマりがキツくて非推奨。

SASのEditorとしては。

各種テキストエディタは適当に使え、なんだけど、テキストエディタではやはり能力に限界がある(色分けくらい)ので、プログラムエディタくらいは投入したいところ。
今想定しているのはAtom Editor。
設定には一癖二癖あることもあって、VS Codeも見てみたが、野良で機能を突っ込むにはAtom Editorの方が楽だろうとは思っている。現行環境では外部パッケージを取り込むことは出来ているので、あとはautocomplate機能、language-sasのもうちっとのカスタマイズ、辞書機能の利活用どうするの問題をクリアできればなあ。
ただ、正直サクラエディタgrep機能が便利過ぎてなあというのと、Atom文字エンコーディングのデフォルトがUTF-8というので、日本のSASの標準的にはS-JISな環境ではうまくいかないかもしれない。

DMS動かしつつ、裏でバッチ実行するというやり方。

と言っても大げさなものではなく、
単純に、SASUSERのパス変えた違うsasv9.cfgで実行させればいいという話です。
パラレルにバッチ実行するには、rsasuserシステムオプションと、ods pathのパスの最初にWORK.TEMPLATEとかをprependしてやればよいです。ちょっとのコマンドであれば、autoexec.sasではなくsasinitstmtで実行させられます。

コードリストになっている文字列から、コード値の数値に変換する方法

要約

コード変換については、SASの場合にはフォーマット/インフォーマットを使うのが楽です。

数値コード→文字列変換
数値フォーマットを使います。
文字列コード→文字列変換
文字フォーマットを使います。
文字列→数値コード変換
数値のインフォーマットを使います。

インフォーマットとは。

聞きなれない言葉かもしれませんが、、、外部の文字列を取り込んでSASの変数に格納する際に適用される、フォーマットの逆みたいなやつです。
普段はあんまり使わないんですが、CSVからデータ取り込みするとかの場合に適用されます。
また、ほとんどの場合にはフォーマットと対になるインフォーマットがあるんですが、例外も結構あります。
日付型のYYMMDD10.フォーマットは、亜種にYYMMDDS10.フォーマットとかあるんですが、インフォーマットはYYMMDD10,インフォーマットしかないです。スラッシュ区切りでもYYMMDD10.インフォーマット使えばいいのですが。

作り方

こんな感じ。

/* S-JISでやってます */
proc format ;
  invalue _SEXI '男子'=1 '女子'=2 ;
quit ;
data CLASS ;
  set SASHELP.CLASS ;
  attrib SEXN length=8 label='SEX (N)' ;
  keep NAME SEX SEXN ;
  SEXN = input(SEX,?? _SEXI.) ;
run ;
proc print data=CLASS ;
quit ;
OBS    Name            Sex     SEXN

  1    アルフレッド    男子      1
  2    アリス          女子      2
  3    バーバラ        女子      2
  4    キャロル        女子      2
  5    ヘンリー        男子      1
  6    ジェームズ      男子      1
  7    ジェーン        女子      2
  8    ジャネット      女子      2
  9    ジェフリー      男子      1
 10    ジョン          男子      1
 11    ジョイス        女子      2
 12    ジュディー      女子      2
 13    ルイーズ        女子      2
 14    メアリー        女子      2
 15    フィリップ      男子      1
 16    ロバート        男子      1
 17    ロナルド        男子      1
 18    トーマス        男子      1
 19    ウィリアム      男子      1

注意点

このままだと、実はアサインされていない文字列の場合には、bestで適当に数値変換されてしまいます。
通常は文字列を数値に変換しても問題ないのですが、たまたま数値にうまく変換出来る場合であると、変な事になります。

proc format ;
  invalue _SEXI '男子'=1 '女子'=2 ;
quit ;
data CLASS ;
  set SASHELP.CLASS ;
  attrib SEXN length=8 label='SEX (N)' ;
  keep NAME SEX SEXN ;
  if SEX = '男子' then SEX='3.14' ;
  SEXN = input(SEX,?? _SEXI.) ;
run ;
proc print data=CLASS ;
quit ;
OBS    Name            Sex     SEXN

  1    アルフレッド    3.14    3.14
  2    アリス          女子    2.00
  3    バーバラ        女子    2.00
  4    キャロル        女子    2.00
  5    ヘンリー        3.14    3.14
  6    ジェームズ      3.14    3.14
  7    ジェーン        女子    2.00
  8    ジャネット      女子    2.00
  9    ジェフリー      3.14    3.14
 10    ジョン          3.14    3.14
 11    ジョイス        女子    2.00
 12    ジュディー      女子    2.00
 13    ルイーズ        女子    2.00
 14    メアリー        女子    2.00
 15    フィリップ      3.14    3.14
 16    ロバート        3.14    3.14
 17    ロナルド        3.14    3.14
 18    トーマス        3.14    3.14
 19    ウィリアム      3.14    3.14

これを回避するのには、ちょっと仕込みがあります。
otherの設定をしてやると良いです。

proc format ;
  invalue _SEXI '男子'=1 '女子'=2 other=. ;
quit ;
data CLASS ;
  set SASHELP.CLASS ;
  attrib SEXN length=8 label='SEX (N)' ;
  keep NAME SEX SEXN ;
  if SEX = '男子' then SEX='3.14' ;
  SEXN = input(SEX,?? _SEXI.) ;
run ;
proc print data=CLASS ;
quit ;
OBS    Name            Sex     SEXN

  1    アルフレッド    3.14      .
  2    アリス          女子      2
  3    バーバラ        女子      2
  4    キャロル        女子      2
  5    ヘンリー        3.14      .
  6    ジェームズ      3.14      .
  7    ジェーン        女子      2
  8    ジャネット      女子      2
  9    ジェフリー      3.14      .
 10    ジョン          3.14      .
 11    ジョイス        女子      2
 12    ジュディー      女子      2
 13    ルイーズ        女子      2
 14    メアリー        女子      2
 15    フィリップ      3.14      .
 16    ロバート        3.14      .
 17    ロナルド        3.14      .
 18    トーマス        3.14      .
 19    ウィリアム      3.14      .

SASでEXCELを取り込む場合、DDEでファイルを取り込むと、セル内改行文字でぶった切られる件

SAS9.4で確認。


どうにか回避出来ないものかと思って色々考えたんですが、infileステートメントでどうにもtermstrとか指定出来ないですし、別レコード判定がされてしまっているようで。
仕方ないので、改行文字の入っていないセルだけを取り込む形で回避しましたが、どうにも不格好だなあ。


EXCELファイル取り込み、幾つか方法があります。

SAS/ACCESS Interface to PC Files経由
PROC IMPORTでDBMS=EXCELで取り込む方法。SAS/ACCESS Interface to PC Filesのライセンスが必要です。また、SASのbit数とOfficeのbit数が合わない場合には、PC Files Serverを立てる必要があり、かつ、EXCELCSエンジンとか使う必要が出て来ますし、コントロール出来るレベルが変わります。
DDEで取り込む
DDEは古いデータ交換方式で、どちらかというと、動いているアプリケーション間でのデータのやり取りに使われるのですが、廃止されてはいませんが、あんまりセキュアではないです。DDEを使ったExploitはあります。ただ、今でも、Excel文書のリンク機能なんかはDDEで行われたりしているので、完全廃止とかになる可能性は薄いかと思います。


SASのDDE特有かもしれませんが、XWAIT/XSYNCとかをNOにしておかないと、バッチ形式であってもプロセスが停止したりしますね。
このあたりも問題で、Windowsのセッション内でSYNCでない状態で別プロセスでExcelを起動しそこと非同期で実行するのに、不確実なsleep関数を仕込む必要があるとか、ちょっと良くないやり方にはなってます。


Excelのセル内改行の問題は、昔からいろんなアプリで「対応していなかった」のですが、Excelのデータを例えばCSVやTSV(という言い方はあんまり一般的ではないですが、タブ区切りのテキストファイル)に保存して読み込む際でも再現出来ないというオチがあり、ある意味仕方ないのですけど、ですけど。。。。


暇になったらマクロでも作ってみようかと思いますが、多分SAS/ACCESS Interface to PC Filesとかでは回避出来るんじゃないかというのと、そもそもそれはSASで頑張りすぎじゃないか(Excel側でやるのがみんな幸せになれると思います)というので、優先度は低め。

サーバのSAS環境に源ノ角ゴシック Code JPを入れたい。

SASプログラムで、私結構一重引用符使うのですが、
MSゴシックだとこれがカンマと混ざるのが辛い。


源ノ角ゴシックを拡張エディタで使いたいなあと思うのですが、如何せん共有サーバだと厳しいっすなー。
SAS自体に仕込むんじゃなくて、あくまでもエディタ設定に仕込みたいだけなので、悪影響はないと思うんですけどね。
ちょっと話してみたいですが、検証環境がない故に試しにくい見せにくいのが困りものです。

SDTMとかADaM触っててイライラする事

SAS V5 Transport fileの制限ではあるが、

  • 変数名8文字まで

というのが、プログラムにおいて大変質が悪い状況を発生させてる。
変数が認識しづらいし、サジェスト機能を作るにも不便きわまりない。


やっぱまともなプログラマーが設計とかに関係しないとダメですね。

連続性の補正、という言葉について。

直接相談された訳ではないので言ってませんが、メモとして。


この単語が出てきた場合には、
何らかの値が本来は離散値であるにも関わらず、連続値として想定し、連続値用の分布を使って近似する場合で、
ちょっと統計的に有意な差が出ないような側に統計量計算の際、その計算元となる離散値から0.5を減じるという処理を行ってます。
連続性補正 - Wikipedia


メジャーどころではカイ二乗検定イェーツの補正ですね。
この場合には、頻度分布なので離散値なんだけどなー連続値のカイ二乗分布で近似してるよなーという所で、度数の部分で確か0.5減じてたと思います。
位置の検定、順位とか使うやつでも、連続性の補正が発生する事があります。

おまけ

SASでは、NPAR1WAYプロシージャで、PROC NPAR1WAYステートメントでWilcoxonオプションを指定するとWilcoxonスコアというのが計算されますが、単純にVARに指定した順で順位つけてその値を使って計算しています。
「順位」を値としてみなして、それが正規分布だとかt分布だとかに従う事を想定して検定しているだけという、大変簡単な話になってます。
なので、スコアはキレイな数字であり、全体の例数をnとするとn(n+1)/2というのが全スコアの合計になってます。


原義的には正規分布で近似するはずですが、SASではt分布での近似もされる事があります。
この場合、デフォルトではSASは連続性の補正を行っていますが、PROC NPAR1WAYステートメントでCORRECT=NOオプションを指定すると連続性の補正は無しにする事が出来ます。
最近の議論としては連続性の補正ってどうよとかあるかと思いますが、通常は入れとくという話ですね。
ちゃんと指定してくれない依頼者多いと思いますが、最初に「特に指定されていない場合には、SASのデフォルトに従いますよ」的な話つけとくといいかと思います。


なお、このスコアを離散値として正確確率検定を行う事も可能で、EXACTステートメント使う事も出来ます。


Kruskal-Wallis検定は、多群の場合のWilcoxon検定の拡張になります。
正規分布ではなくカイ二乗分布使って検定する訳ですが、
二群の場合には自由度1になるし、Kruskal-Wallis検定の結果とWilcoxon検定の結果(正規分布の方)って一致しますね。

転職しております。

12/1付で某大手電機子会社から、CROの方に転職しました。


リセラーな会社だったので、ライセンスとか使い放題な所があったんですが、次は多分違う。
当面は、SAS Foundation製品触るだけになるだろうなーとは思います。

UTF-8で勘違いしてた事。

wつかないlatin-1領域でも、UTF-8に変換すると非ASCIIの所で2バイトになる。

完全にASCIIなら同じに出来るが、latin-1、wlatin-1なら変換が必要で、

latin-1
最悪二倍
wlatin-1
最悪三倍

だなと。

S-JIS領域での最悪は3倍になる事がある。

半角カナが1バイトから3バイトになるなあ。

US-ASCIIでもlatin-1として変換掛けた方がよい。

何となれば、実際の所、Windowsだったりするとwlatin-1の文字が入力出来てしまう(非ASCII文字を排除しない)。
ブラウザとかでlatin-1指定していてもwlatin-1のイメージで動く。

余談

例えデータセットエンコーディングUTF-8であったとしても、そこに格納されている文字のコードがUTF-8であるという事は全然保証はされてない。
結構どんな言語でもそうで、たまたま上手く変換出来ない文字があったりすると引っかかってくるだけなんだよね。

SASのUTF-8で考える事アレコレ。

簡単ながら。

データセットの内容自体はほぼ対応出来る。

文字の固定長指定を長めにしなければいけないとか色々あるけど、とりあえずは出来る。

問題が残る所がある。

SASのラベルの長さが制限されているが、この為、うっかりすると文字が切れる。日本語で255/3*2=170文字辺り。
ただ、そんなにいるか?というと疑問。「通常は」。

SAS V5 TRANSPORT形式ではヤバい。

SAS V5 TRANSPORT形式(XPORT形式)の場合、古い形式に制限される為、正直困難が有りすぎる。
・文字列長さが200バイトまで
・データセット名が8バイトまで
・変数のラベルが40まで
エンコード情報は持ってくれない
実はこれの拡張のV8形式というのがあるんだが、不思議と流行らない。


何故かというとー、結局文字エンコーディングの情報がないという所があるから。
エンジンもトランスエンコーディングには対応していない。
なお、他の手段ねえかというと、今はXMLエンジン使うという荒業があるが、そんな事するくらいなら案外SASデータセットでいいんじゃないのという話もなきにしもあらず。多分SAS9.3か9.4のシロモノで、あまりテストされてない気もするし、時間かかるよって事だし。

余談

データセットラベルは、元から極力使わない事を推奨しておきます。
プログラムで転がしている最中によく脱落しますし。

トランスエンコーディング、というお話を見て。

namelesscity.hatenadiary.com
SASユーザー総会でも誰ぞの発表ありましたが。

エンコーディング情報がないレガシーデータの地獄。

そんなデータあらへんやろーという人に一つだけ言うと。


SAS V6辺りではエンコーディング情報がデータセットにくっついてませんでしたよね?

XPORT形式の地獄。

なので、SAS V5 TRANSPORT FILEの形式だと、トランスエンコーディングの情報がないんですよねー。
SAS 9とかで見ると、エンコーディングがDefaultとか付いてます。Defaultって何ぞやというと、情報がないので現在のセッションのエンコードを無理矢理当てはめますねというくらいにしか意味はないです。

海外データの実際、あれこれ。

SASの世界の話、ですが。

欧米は大体wlatin-1。

だいたいはそうです。UTF-8であってもおおよそはコード値は同じ。
但し、Windowsでの拡張については問題があり、‡とかは位置が異なったりします。
wlatin-1、正確には、Windows-1252といいます。
Windows-1252 - Wikipedia
古来から使われている標準的な仕様としてのlatin-1ではないです。8x、9x辺りが埋まっているのが特徴。
ISO/IEC 8859-1 - Wikipedia
稀にlatin-9とかもあるらしいですが、SASの世界で多いかは知らないです。扱った事はないです。

日本の場合、SJISEUC-JPが混ざる。

Win系のOSだとSJISなのですが、UNIX系ではEUC-JP。
SJIS、正確には、CP932とか言います。
EUC-JPはそのまんまですね。
ただ、SolarisとかはSJISだった記憶があります。本当のレガシーなデータは、つまり結構日本語環境でも文字コード混ざります。

中国語・韓国語は取り扱ってない。

まず、英語版(wlatin-1)で扱われている事が殆どだと思います。

UTF-8を素で使っているケースは稀。

SAS 9.4くらいでも若干UTF-8の表示には弱い所があるみたい、という憶測があります。
SAS 9.1.3では評価版的な機能でUIが追従してませんでしたし、SAS9.2でもUTF-8モードはデフォルトではなかったと思います。
UTF-8モード、ログウィンドウがなんか表示壊れるんですよね・・・・・・

autodetect&transcodingの方法論

発表へのツッコミみたいになるのちょっとイヤですが。

  • 変換表みたいなのを作成し
  • 変換表に従って実行

みたいな二段階にした方がいいかと思うのと、

  • 文字コード変換のバリデーションも自動化した方がいい

です。


自分が実装したのは、「とりあえず○→UTF8変換、そこからUTF-8→○変換」を、想定しているwlatin-1やsjisの分だけ実行して、「実行が異常終了」「proc compareでの比較確認」という感じでやりました。
autodetectのロジックは作るのが面倒でかつ「フォルダ単位でのエンコーディングは普通同一」というような知見を突っ込んだ方が楽だったので。


なお、個人的には、「そろそろHTAヤバいんじゃないかな」とは思うんですが(そろそろWin10)、他、デフォルトで使えそうなのが結局Excel VBAとかだとちょっと悲しいですよね。
けど、Electronとか面倒くさそうだしなあ・・・・・・あの適当さを代替するものって、ナカナカないですよねえ・・・・・

文字コード変換後の実際の長さの検出

最初に、CVPMULT=3とかにしておいて、後で実際の長さに詰める、という事は全然出来るのですが、SASデータセットの場合、油断するとMEMLABELが削れたりFORMATが削れたりするので注意です。SDTMとかはFORMAT要らんですが。
ただ、変換再度あるので面倒だし、COMPRESSオプション使った方が幸せなんじゃないかと思います。

ラベルの変換、変数名やテーブル名の変換

ラベルの最大長が256バイトの為、SJISでダラダラ付けられたラベルは変換すると切れると思った方がいいです。
まあSDTMの場合には変数名やテーブル名の問題も発生しませんが、これ拡張使ってダブルバイトの変数名とか付けてると、これもまた切れます。

独自に作成したアプリケーションのバリデーションはどうするか。

「逆変換して、元のデータセットと比較して確認した」というやり方をした事があります。ただ、結局の所、そのまま申請データとして用いた訳ではなく、多分プロトコル毎にチェックはされているはずです。
そういう形で逃げられない場合にはどうしましょうねえという所は悩みどころ。

プログラムの文字コード変換の場合は、「大変です」。

Windowsでやろうとすると、APIとか叩くプログラム作ったりするのも出来はするんですが。
ただ、逆変換含む比較が難しいというか、「文字として読み込んで、改行文字は適宜CRLFとLFは同じものとして比較」とかありがちなんですよね。
Git適用とか考えておられるならば、改行文字はLFに統一して下さい、とか言いたいんですが、SASのDMSでは改行コードとか指定して保存出来ないかなーと思ったりもします。

立派な客よりマトモな客求む。

もう、あのシステム保守自体切りたいんだけどマジで。


某製薬会社向けの受託開発やったのおそらく十年は前。
システム綺麗にしましょうとかバージョンアップさせましょうとか延々と伸ばされ提案は却下され、保守費用も月数時間とお客さん環境に接続する為のe-Learningやパスワード変更分くらいしかないし。
まあ、それでも理屈にあった事ならまあ仕方ねえなあとは思ってたけど。


出力帳票の全パターン設計に書け、とか言われて正直モチベーションダダ下がりです。
いや、出力に影響するパラメータ複数をわざわざマトリクス化して、「ほらちゃんとそれぞれのパターン網羅してるでしょ」とか書いてたのに、「設計書にはそもそも全て載せるべき」みたいな事を言ってくるんだからもうどうしようもないね。


はあ、ホント何で客のプロジェクトオーナー余所に行っちゃったんだろう。残された人はつらいわ(システム開発してた前任者の先輩は、もう亡くなってるってのもある)。


ある意味、こういう信頼関係の阻害が、システムを遺産化していくんだろうなあとは思うんだよ。ずーっと面倒見てたらそら幾らなんでも「古いXPマシンが必要」とかにはなってねえしなあ。


ああうんざり。


何だろうねえ、名前が通っている会社ほど非人道的な事するし、正直頑張る気がせん。
東京勤務だったらマジで転職してただろうなあ。まあ、大阪でも転職出来なくはないけど、面白味にはかける。


でもなー、データ利活用とか統計だーとかの人って、大体はろくでもないんだよなー。あったら便利程度の道具にしか思ってない。そもそも日本の情報システム部の評価は低いし、コストとしか思ってないからねえ情報システムを。
とにかく安く安く。


AWSだって、「安く」しか見てないでしょ。
そうじゃねえ、「情報システムにはドンドンカネかけてくもんだ」って意識ない。AWSにレガシー如何に載っけるかとか、如何に古いシステムを延命させるかとか、そんなニーズしか日本にはないから、SIerとかの仕事が全般的に腐っていってるだけなんだ。
あまりにも「そんな腐ったユーザを見捨てなかった」業界も悪いんだけどさ。


そろそろ、情報システム側が、三行半突きつけていいと思うんだよねえ。

縛りプレイでの、Phoenix Framework環境構築。

環境の縛り

  • 認証つきProxyで外部環境に繋がる。
    • ユーザIDには「@」を含む。
  • Windows上。

Phoenix Frameworkのインストールガイド

www.phoenixframework.org

必要なアプリ・モジュール

Elixir

そりゃElixirで動くFrameworkだからなあ。

Hex

Erlangのライブラリ管理ツール。

Phoenix

Phoenix Framework本体。Installの所と違ってここに位置付けたのは、単にツリー構造上の話です。Elixirのパッケージだから。
ただ、このインストールの方法では特にHexを使ってインストールしている訳ではない。

Erlang

そりゃElixirはErlangVMで動くからなあ。

Plug, Cowboy, and Ecto

Phoenix Frameworkが必要とするElixirやErlangのパッケージ。中身は今の段階では分からず。
同じVMだからもあるけど、ElixirからErlangのパッケージなんかは利用しやすいようで。
Phoenix入れたら勝手に入るらしい。

node.js (>= 5.0.0)

Phoenix Frameworkではデフォルトではbrunch.ioとかで画面の静的アセット作るらしい。画面はよう分からんが、他に切り替えるほどのノウハウ持っている訳もないので入れておく。

PostgreSQL

裏にDBもつものらしい。うーん、Webアプリから利用するデータおく為のもの?な位置付けでいいのか?
よく知らん。

インストー

Elixirインストー

公式インストーラーで問題なし。
・・・・・・と言いたいがそのままではmixが上手く動かない。後述。

Erlangインストー

問題なし(Elixirと共に入る)。

node.jsインストー

インストール自体は問題ないが、やっぱLinuxベースアプリという事で、Proxyが上手く通らない。
Proxyの設定が必要。

npm -g config set proxy "http://<proxy username>:<proxy password>@<server>:<port>/"
npm -g config set https-proxy "http://<proxy username>:<proxy password>@<server>:<port>/"
npm -g config set registry "http://registry.npmjs.org/"
npm -g config set strict-ssl=false

ユーザ名やパスワードにURIエンコーディングが必要。
試しにbrunch.ioをインストールして通る事は確かめた。
・・・・・・重い。

PostgreSQLインストー

本体は問題なし。psqlodbc入れるStackBuilderが動作しない。Proxy設定を上のように入れてみても上手くいかないので諦め。
psqlodbcを手動で導入した。
postgresユーザのパスワードが、Phoenix Frameworkではpostgresなので苦労しないように一応そうしておく。
・・・・・・良くないです。

Windows版だと、デフォルトでPostgreSQLのそのDB起動周りもサービスとして登録されます。
デフォルトのポート番号は「5432」。

hex導入のmixコマンド

そのままでは動作しない。Proxy設定する所もない。
・・・・・・環境変数http_proxy、https_proxyを設定すればその設定を読んでくれるというのをソースから推測して入れる。
但し、npmの設定と異なり、URIエンコーディングは不要だった。何か他のエスケープ文字あったりする?
他のアプリの設定と一致しないので、ちょっと考えて、mix.batに以下二行を先頭に追加。

@set http_proxy=http://<proxy username>:<proxy password>@<server>:<port>/
@set https_proxy=http://<proxy username>:<proxy password>@<server>:<port>/

これで、「mix local.hex」は成功する。mixコマンド経由ではとりあえずプロキシ通る。

Phoenix導入

「mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez
です。
上が通れば出来るはず。

skeleton試してみる(mix phoenix.new --no-brunch --no-ecto&mix phoenix.server)

プロジェクトの置き場に行って

mix phoenix.new <project name> --no-brunch --no-ecto

する。
すると、のフォルダが出来て、その下にPhoenixのテンプレートがコピーされる。
「Fetch and install dependencies?」と聞かれてYを選択すると、その後に、mix deps.getが実行されて、依存関係のあるモジュールも落ちてくる。

cd <project name>
mix phoenix.server

で、フォルダ配下のElixirのファイルがコンパイルされて、サーバが動く。

普通にプロジェクト作ってみる(mix phoenix.new)

プロジェクトの置き場に行って

mix phoenix.new <project name> --no-brunch --no-ecto

する。
Phoenixのテンプレートがコピーされるまでは一緒(但しモジュールが増えてる)。
ただ、先の質問でYを答えると、mix deps.getの後に、

npm install && node node_modules/brunch/bin/brunch build

が実施されている。これが遅い。

これで、package.jsonの内容をインストールしているらしい。
んだが、クソ重い。なんだこれ。
まあ、他にCPU使ってるのもあるんだけど・・・・・・

多分、前のDISのは、当面直らないんではと思う。

namelesscity.hatenadiary.com
あれからも、このバグって簡単かねえと思いながら見てたのですが、
そういや、
Oracleの場合二重引用符で列名を指定する事が出来た
なと。
SASは名前リテラル('~'n)というのを持っているので二重引用符と一重引用符の使い分けなしに(この使い分けは、SASはマクロ言語の所で使ってしまっている)なんとかなりますが、SQLとして標準化されていくものとしてこんなの使われる訳ないよねと。


PROC SQLステートメントのオプションに、DQUOTE=オプションがあり、ANSISASどちらかで指定出来るのですが、ANSIで設定すると二重引用符で列名を記載する事が出来ます。SASの場合には、これは文字リテラルであるなと認識されます。
つまり、そういう細かいオプションに判定アルゴリズムが引きずられるので、多分問題になるかと思います。
PROC SQLも古いプログラムですしね。SAS/ACCESS Interfaceあたりにも影響するはずの為、ちょっと簡単ではないと思われます。


なお、FEDSQLというのが出てますが、イマイチ使い勝手は分かっていません。