2006年12月21日木曜日

求人情報掲載@イーキャリア


業務拡大に伴い、ネイチャーインサイトでは求人活動を強化しています。



11月中旬より、転職応援サイト イーキャリアに求人情報を掲載しています。


当社の雰囲気が感じ取れるような記事に仕上がっています。


記事の詳細はこちらからご覧下さい。



未経験の方、業界経験ある方、広く募集しています。


2006年12月12日火曜日

小数点以下を指定の桁数で切り捨てる方法


例えば、0.123という値を小数点第2位で切り捨てて0.12に変換したい場合等です。



小数点以下を単純に切り捨てるのであればINT関数等で処理できます。


また、指定の桁数で四捨五入するのであればROUND関数で処理できます。



SASでは、小数点以下を指定の桁数で切り捨てるような関数はありません。


そこで、下記のように工夫します。




* データ作成 ;


data temp ;


 x = 0.123 ;


 y = 0.127 ;


 z = 0.1 ;


run ;


* 切り捨て処理 ;


data temp2 ;


 set temp ;


 x2 = int(x * 100) / 100 ;


 y2 = int(y * 100) / 100 ;


 z2 = int(z * 100) / 100 ;


 put x2 = y2 = z2 = ;


run ;



お分かりでしょうか?


まず、値を100で乗算したものをINT関数で小数点以下を切り捨てます。


それを元の桁に戻すために100で除算します。



小数点第3位で切り捨てる場合は、1000で乗算し1000で除算します。



他の言語でも使われる定石的な方法です。


2006年11月11日土曜日

SASログのチェックについて


SASプログラムを実行した後で、そのログをチェックすることは必須の作業です。


ログにエラーメッセージやワーニングメッセージが無いことを確認することも、そのうちのひとつです。


短いプログラムであれば、目で処理毎に追いながら確認しますが、それなりの規模のプログラムを対象とする場合は、検索機能でチェックすることも効率的です。



そのようなときに、対象とする単語は"ERROR"、"WARNING"です。


仮に、エラーやワーニングがあればその箇所が検索結果に引っ掛かります。



しかし、上記だけでは不十分な場合もあります。


SASのログには、エラーやワーニング扱いにはならなくても、見落としてはいけないメッセージが出力されるからです。


以下がその代表的なものです。



  • 変数~は初期化されていません。

  • MERGE ステートメントに BY 値を繰り返すデータセットが 複数あります。

  • 切り捨てられた行があります。


このようなメッセージを実際にログの中で目にしたことがあるでしょう。


ログのチェックをするときには、このような単語も検索対象とした作業を行うのが万全です。



それぞれの詳細や具体例は、後日追記します。



※尚、ここに記載したログのメッセージ内容は、Windows版SASシステム リリース8.02で出力されるものです。


2006年10月5日木曜日

書籍購入『Ajax逆引きクイックリファレンスWeb2.0対応for Windows & Macintosh』

INT関数


INT関数は、引数に指定した数値の小数点以下を切り捨て整数を返す関数です。


使用方法は以下の通り



data _null_ ;


 x = 1.23 ;


 y = int(x) ;


 put y = ;


run ;



実行するとログに y = 1 と出力されます。



引数に正の値を指定している場合は問題ありませんが、


負の値を扱う場合は注意が必要(特にExcelユーザ)です。



以下のサンプルを実行すると y = 0 の範囲は -1 < x < 1 となり、


度数は他の y の値の約2倍の数になります。



data temp ;


 do i = -5 to 5 by 0.1 ;


  y = int(i) ;


  output ;


 end ;


run ;



proc freq data = temp ;


 tables y ;


run ;




~~~~~~~~~~~~~~~出力~~~~~~~~~~~~~~~


FREQ プロシジャ


     y     度数    パーセント   度数   パーセント


     ------------------------------------------------------


     -5      1     0.99      1      0.99


     -4     10     9.90      11     10.89


     -3     10     9.90      21     20.79


     -2     10     9.90      31     30.69


     -1     10     9.90      41     40.59


      0     19     18.81     60     59.41


      1     10     9.90      70     69.31


      2     10     9.90      80     79.21


      3     10     9.90      90     89.11


      4     10     9.90     100     99.01


      5      1     0.99     101     100.00




※特にExcelユーザは注意としたのは、


シート関数やVBAのINT関数は、数値を超えない最大の整数を返す関数で、


int(-0.9)と指定した場合、-1 が返されます。


2006年9月26日火曜日

ex.COMPUTER「Caderna」購入


この度NIでは、社員の増加に伴い、ex.COMPUTERの「Caderna」というノートブックを2台購入しました。



f:id:n-insight:20061225175514j:image




CPUは「Intel Core Duo プロセッサ T2400」です。



主に新入社員の研修用マシンとして役立てています。



また、社内のデスクはフリーアドレスということもあり、


客先常駐社員が帰社時に使用するマシンとしても使われています。


2006年9月11日月曜日

INPUTステートメント内の「@」


CSVやテキスト等の外部ファイルを読込む場合、SASデータセットでは全ての項目を扱う必要がない場合があります。


そのようなケースで、知っておくと便利な方法を今回は紹介します。



例えば、以下のようなCSVファイルを読込みます。



「ファイル名:sample.csv」


1,A01,10,5


2,A01,10,4


3,A02,20,3


4,A02,20,2


5,A03,30,1



左から2番目の項目がSASデータセットには不要だとします。



一般的な記述としては、不要な項目も一度SAS変数(この場合は文字変数)として読込み、SASデータセットに出力する際に、DROPステートメント等で必要な変数のみを出力対象とさせます。



例)


data sample(drop=var2);


 infile "d:\sample.csv" dsd ;


 input var1 var2 $ var3 var4 ;


run ;




「@」をINPUTステートメントで使用すると、以下のような記述ができます。



例)


data sample ;


 infile "d:\sample.csv" dsd ;


 input var1 @"," var3 var4 ;


run ;



不要な項目をINPUTステートメントで指定する箇所に、「@","」と記述します。


こうすることにより、任意の位置のデータを読み飛ばして処理をさせることができます。


(タブ区切りのファイルの場合には、「@"09"x」と記述します。)


2006年8月21日月曜日

折りたたみ自転車購入


ご覧のように、事務所からの近隣移動用に折りたたみ式自転車を購入しました。



f:id:n-insight:20061221104013j:image



タイヤは20インチですが、SHIMANO製の6段変速ギアを搭載しています。



最近、千代田区界隈を自転車で走行していると、同類の"ビジネスマン折りたたみ自転車族"をよく見かけます。


エコロジー/運動不足解消/経費削減など、自転車移動がもたらす社会や企業へのメリットは沢山あると思います。


何よりも風を切って走る爽快感は、仕事でのストレスを吹き飛ばしてくれますね。



もちろん、事故には気をつけましょう。


自転車は被害者にもなりますが、加害者になることもあります。


また、夜間のライト点灯は必須です。


2006年8月15日火曜日

LOCKステートメントについて


LOCKステートメントを使用してSASデータセットを更新する場合、


SETやMERGEステートメントではなく、MODIFYやUPDATEステートメントを使用してSASデータセットを更新しましょう。



SETやMERGEステートメントは、「~.sas7bdat.lck」と言う名のテンポラリファイルを作成し、


処理が終了した段階で元の「~.sas7bdat」を削除し、「~.sas7bdat.lck」をリネームします。


元の「~.sas7bdat」を削除する際に、lockが一度解除されます。



そこに別のプロセスが入ると、lockを取得したSASデータセットに別の処理が入ってしまい、


データの体裁が整わなくなる場合があります。


MODIFYやUPDATEステートメントは、「~.sas7bdat.lck」を作ることなく、


直接SASデータセットを更新していくので、上記のようなことはありません。


2006年7月26日水曜日

NECのモバイルプロジェクタ購入


この度NIでは、NECのモバイルプロジェクタ「LT35J」を購入しました。



f:id:n-insight:20061225174322j:image


f:id:n-insight:20061225174310j:image



高性能で持ち運びも容易なのでとても重宝しています。


値段もそれなりにしましたが・・・。




月1回行われる社内での定例会や、プレゼン等で利用しています。


たまには社内でDVD鑑賞なんてのもいいですね。


2006年7月23日日曜日

DELLの高性能ノートブック購入


NIでは、DELL社の高性能ノートブックを3台購入しました。


製品名はInspiron 9400です。



f:id:n-insight:20061222173555j:image


f:id:n-insight:20061222173554j:image



現在、3台ともにSAS社「Enterprise Guide」を導入し、


1台は「SAS Enterprise BI Server」として稼動しています。



社内で、BI構築ノウハウの研究社員の研修に役立てています。




2006年7月17日月曜日

変数名の略記方法


Tipsと呼ぶほど大したものではありませんが、結構便利な使い方です。



まず、変数名の略記方法ですが、


例えばvar1、var2、var3という変数がある場合にそのすべてを指定する記述は、var1-var3という方法があります。


また、var:でも可です。(ただし、var5とかvariable1という変数があればそれも対象になります。)



ここでは、var:の略記方法を使った例を挙げます。



INFILEステートメントで外部ファイルを読み込む場合、


最終的には外部ファイルの項目をすべてデータセットに出力する必要がないときがあります。


読み込んだ項目によって新しく変数を作成したり、レコード抽出のためだけに必要な項目がある場合です。


このようなとき、最終的にデータセットに出力する必要がない項目を格納する変数には、"_"のような共通の接頭語を付けておきます。



data dat1(drop=_:) ;


 infile "D:\\inputdat1.csv" dsd missover firstobs=2 ;


 input key1 key2 _key3 _var1 _var2 var3 var4 var5 _var6 _var7 ;


 if _var1 and _var2 ;


 key3 = put(_key3,z8.) ;


 var8 = _var6 + _var7 ;


run ;



こうしておくことで「data dat1(drop=_:) ;」という記述が可能になり、


dat1というデータセットにはkey1、key2、key3、var3、var4、var5、var8の変数のみが出力されます。


この例程度の項目数であれば、あまり利便性は感じられないかもしれません。



また、保持する項目は明示的にKEEPステートメントで指定するというルールでコーディングする場合もあるかもしれません。


使い分ける判断力は必要かと思いますが、覚えておいても損はしないでしょう。


2006年7月14日金曜日

前0付き値のマクロ変数設定方法


%DOループ内でインデックス的な前0付きのマクロ変数を定義する方法です。



%do i=1 %to 100 ;


 %let idx=%substr(%eval(&i+1000),2) ;


%end ;




DATAステップを使用してzN.フォーマットで変換した値をCALL SYMPUTルーチンでマクロ変数に設定する方法が一般的ですが、


上記の方法だとDATAステップを使用せずに前0付きの値をマクロ変数に設定できます。



%DOループ内でdat001~dat100というようなSASデータセット名や、var001~var100というような変数名を作るときなどに便利です。


2006年7月1日土曜日

オブザベーション数をマクロ変数として取得する方法



SASでプログラミングをする際、
任意のSASデータセットのオブザベーション数を取得したい場合がよくあります。

いろいろと手法はあると思いますが、
ここでは以下3つの方法を紹介します。

オブザベーション数を取得するSASデータセットは、
下記『temp.sas7bdat』とします。

 f:id:n-insight:20070302235244g:image


 ①SETステートメントの「NOBS=」オプションを使用する場合

 data _NULL_ ;

  set temp nobs=obs ;

  call symput("TOTAL_OBS1", obs) ;

  stop ;

 run ;

これが一番普通の手法でしょうか。

NOBS=の後に記述したSAS名(ここではobs)に、
SETしたSASデータセットのオブザベーション数が入ります。

あとは、CALL SYMPUTルーチンでマクロ変数を定義するだけです。

実行結果は下記の通りです。

 f:id:n-insight:20070302235330g:image



 ②SQLプロシジャを使用する場合

 proc sql noprint ;

  select count(*) into: TOTAL_OBS2

  from temp ;

 quit ;

まず、count()はSQLの関数です。


「count(変数名)」のように変数を引数に与えることもできますが、
引数で指定した変数に欠損値またはブランクがある場合、
そのオブザベーション(行)をカウントしてくれません。
(もちろん、それを理解したうえで使う場合もありますが…)

そのため、このような場合ではcount(*)と記述します。

次に、count(*)の戻り値をマクロ変数として定義するために、
「into: マクロ変数名」というかたちで記述します。


実行結果は下記の通りです。

 f:id:n-insight:20070302235352g:image


 ③マクロ関数%SYSFUNCでSCL関数を使用する方法

 %let DSID = %sysfunc(open(temp)) ;

 %let TOTAL_OBS3 = %sysfunc(attrn(&DSID, nobs)) ;

 %let rc = %sysfunc(close(&DSID)) ;



最後は、かなりマニアック(?)な方法です。

SCLとはScreen Control Languageの略で、
SAS/AFプロダクトなどで使われるSAS言語のうちのひとつです。

ここではそのSCL関数の中から下記3つを使用します。

  • OPEN関数 ・・・SASデータセットを開く

  • ATTRN関数・・・SASデータセットの情報を取得する

  • CLOSE関数・・・SASデータセットを閉じる

まずは、OPEN関数でSASデータセットを開きます。

「OPEN(SASデータセット名)」
また、以降の処理で開いたSASデータセットを識別するために、
戻り値をマクロ変数として定義しています。

次に、ATTRN関数でSASデータセットの情報(ここではオブザベーション数)を取得します。
「ATTRN(SASデータセット識別子, 第2引数)」
OPEN関数で開いたSASデータセットの識別子を第1引数に与えます。
また、第2引数にNOBSというキーワードを指定を指定します。
(NOBS以外にも指定できるキーワードはあります。詳しくはまたの機会に。)

最後に、CLOSE関数で開いているSASデータセットを閉じます。
「CLOSE(SASデータセット識別子)」

OPEN関数で開かれたSASデータセットは、そのままだと開かれたままの状態です。
余程の理由がない限り、CLOSE関数で必ず閉じましょう。

実行結果は下記の通りです。

 f:id:n-insight:20070302235416g:image



以上。長くなりましたが、3通りの方法を紹介しました。
どれがベストな方法かは答えられません。

  • 単純にオブザベーション数を取得するだけなのか

  • 一緒に他の処理も行う必要があるのか

  • 想定されるデータ(容量)はどれぐらいなのか
等、シチュエーションは様々でしょう。
これに限ったことではありませんが、
いくつかの手法の中から状況に応じて使い分けることが、理想でありベストな方法なのだと思います。

2006年6月21日水曜日

NIオフィス移転


この度、ネイチャーインサイト株式会社(NI)は事業拡大に伴い、


オフィスを千代田区岩本町に移転しました。





ビルの名称はスヂノビルです。


f:id:n-insight:20061221113522p:image



最寄駅はJR/東京メトロ日比谷線「秋葉原」駅及び、都営新宿線「岩本町」駅で、


共に徒歩数分程度の距離です。



会社所在地の冠に"千代田区"が付き、日本最大の電気街"アキバ"が近所になりました。



地理的にいろいろと便利になったことで、会社の業績アップにつながることを期待します。


ツイート数からみる"バーチャルYouTuber"ブーム

今や YouTuber の話題の半分を占めるほどのクチコミ数に 当社が提供するソーシャルビッグデータ検索ツールの「 beInsight (ビーインサイト)」を使って、話題の「バーチャル YouTuber 」について調べてみました。 「バーチャル YouTuber...