2016-09-04 7 views
2

の新しいマクロプレフィックス語を生成tryマクロ:これは私が新しいマクロをしたい定義古いマクロ

a b c

値でマクロを生成します

local try "a b c"

try2これは値をとる

da db dc

つまり、古いマクロの各要素に同じプレフィックスを追加し、新しいマクロとして定義したいと思います。

答えて

2

公式のStataでこれをサポートしている機能はありません。近くの関数については、help macrolistsを参照してください。

古いパッケージlistutil(SSC)には、さまざまなコマンドが含まれています。prelistが該当します。私はそれを書いたので、一般的な手法を適用することを推奨する他人の仕事については否定的ではありません。

local try "a b c" 
local copy `try' 
gettoken first copy : copy 

while ("`first'" != "") { 
    local try2 `try2' d`first' 
    gettoken first copy : copy 
} 

di "try is {col 12} `try'" 
di "try2 is{col 12} `try2'" 
+0

ありがとう、これは私の問題をうまく解決します。 :) – sxgn

+2

@sxgnこれが役に立ちましたら、左側のチェックマークを使って答えとして選択してください。 –

1

これもMataを使用して行うことができます。すなわち

local try "a b c" 
mata: st_local("try2", invtokens("d" :+ tokens(st_local("try")))) 

assert "`try2'" == "da db dc" 

、これにより、第2ラインは最初の最も内側の機能を説明する、何である:

  1. st_local("try"):ローカル変数の内容をアクセスします。これは "a b c"と評価されるべきです。
  2. tokens("a b c"):文字列をトークンに分割します。 tokens("a b c") - >("a", "b", "c")
  3. "d" :+ ("a", "b", "c"):マタでは、あなたは+で文字列を連結し、ここに:+ことができ、この要素単位を行い、その結果は(「DA」、「DB」、DC」)となり
  4. invtokens(("da", "db", dc")):置きますバック文字列にトークン、すなわちinvtokens(("da", "db", dc")) - >"da db dc"
  5. st_local("try2", "da db dc"):。。local try2 "da db dc"のマタ相当

あなたはマタについての詳細を調べることができ、例えばとst_local()tokens()、およびinvtokens()の機能します。 help mf_st_local

関連する問題