Compound double quoteについて

プログラミング

このブログでは、統計解析ソフトStataのプログラミングのTipsや便利コマンドを紹介しています.

Facebook groupでは、ちょっとした疑問や気づいたことなどを共有して貰うフォーラムになっています. ブログと合わせて個人の学習に役立てて貰えれば幸いです.

さて、今回のテーマはcompound double quoteについてです.

聞いたことがない方も大勢いると思いますが、知っておくと便利なのでご紹介します.

1.QuoteにQuoteを重ねる

ハムレットのセリフに、”To be, or not to be.”というのがありますね.これを、

Hamlet said “To be, or not to be.”

とdisplayさせてみましょう.どのようなプログラムを書くでしょうか?

display Hamlet said "To be, or not to be."

これは全くダメです.Hamlet not foundとエラーがでます.ハムレットが見つかりません.思わずクスっとなります.

display "Hamlet said "To be, or not to be.""

これもダメです.””の上にそのまま””をかぶせてもダメなようです.Hamlet said To not found、だそうです.

display `"Hamlet said "To be, or not to be.""'

””の上に””をかぶせたら、そのあと`’をかぶせます.この構造をcompound double quoteと言います.

Stataを作文に使うわけはないので、実際にどのような場面で役立つかを見ていきましょう.

2.# “var” の組み合わせを並べる

例えば値ラベルを先に指定しておいて違うデータセットで使いたいときとか、グラフのlegendに変数名を入れたいときなどが想定されると思いますが、以下のように「数字+文字列」の組み合わせがスペースを挟んで並んでいるような状況を想定します.

local text 1 "The" 2 "quick" 3 "brown" 4 "fox jumps over" 5 "the" 6 "lazy dog."
display `text'

これだと間のスペースがすべて埋まってしまい、以下のようになってしまいます.

1The2quick3brown4fox jumps over5the6lazy dog.

これを解決するのがcompound double quoteです.

local text 1 "The" 2 "quick" 3 "brown" 4 "fox jumps over" 5 "the" 6 "lazy dog."
display `"`text'"'

これですと、きれいにスペースが残ります.

1 “The” 2 “quick” 3 “brown” 4 “fox jumps over” 5 “the” 6 “lazy dog.”

3.グラフで活躍

自分の場合はこの場面で行き詰ってこの考え方に行きついたので、おそらく他の方にとっても朗報なのかなと思います.

下の例は、車の燃費と値段を示した散布図です.Miles per gallonは燃費のことですよ、ということで注釈を下の段に入れたいと思ったときには通常、以下のようにします.

sysuse auto, clear
twoway scatter price mpg, xtitle("Miles per gallon" "(Fuel efficiency)")

軸のタイトルは一つしか付きませんので、””が二つ並ぶと改行することになります.

問題は軸ラベルなどのように複数の値を()の中に入れこまねばならない状況ではこれはエラーになってしまいます.

sysuse auto, clear
graph bar (mean) price, over( foreign , relabel(1 "Domestic" "(国産)" 2 "Overseas" "(海外)"))

option labels() incorrectly specified
expects, # “label” # label …

というエラーメッセージが出てしまうのです.つまり、1 “Domestic” 2 “(国産)” … ってやらないとダメだよ!というメッセージになります.

ここでまた再びアイツの出番です.

sysuse auto, clear
graph bar (mean) price, over( foreign , relabel(1 `""Domestic" "(国産)""' 2 `""Overseas" "(海外)""'))

これは軸ラベルに文字列を入れる必要があるような場面で役に立ちます.横に長すぎる!というときに、ang(45)などとオプションを入れて45度に傾けたり、alternateとして互い違いに表示させたりすることもできますが、2行にした方がすっきりと収まる場合が多いですし、グラフエリアがあまり狭くならずに済むのでおススメです.

4.データセットをまとめて処理する

これは具体例を示すことが難しいので、説明だけでご容赦ください.

あるworking directoryにおけるStata形式のデータセットすべてに対してある処理を施したい場合、データセット名をすべて1つのマクロに格納し、それをfor構文で回すというスタイルです.

local datafiles: dir . files "*.dta"
di `"`datafiles'"'
foreach file of local datafiles {
	use `file', clear
	// do something with the file
}

ループに関する内容を網羅した記事はコチラ

まとめ

Compound double quoteについてまとめました.スペースを保持したいとき、改行を入れたいとき、などで使う場面があると思いますので参考になればと思います.

コメント

タイトルとURLをコピーしました