2016-05-15 6 views
1

Zum Beispiel weiß ich, dass ich eine globale Liste als Spaltennamen für eine definierte Matrix, z.Wie platziere ich die Elemente einer globalen Liste in eine Variable?

global letter = "a b c d e f g h" 
matrix colnames mymatrx = $letter 

..However, ich möchte eine Stata Variable erstellen, die in einer Variablen, so etwas wie dies die Elemente meiner globalen Makro hat:

gen myvar = $letter (Note: this doesn't work) 

Antwort

3

Es ist nicht klar, genau das, was Sie wollen, aber alle diese drei Interpretationen sind legal:

clear 
set obs 8 
global letter "a b c d e f g h" 

gen letter1 = "$letter" 
gen letter2 = "$letter" in 1 
gen letter3 = word("$letter", _n) 

list, sep(0) 

    +---------------------------------------------+ 
    |   letter1   letter2 letter3 | 
    |---------------------------------------------| 
    1. | a b c d e f g h a b c d e f g h   a | 
    2. | a b c d e f g h       b | 
    3. | a b c d e f g h       c | 
    4. | a b c d e f g h       d | 
    5. | a b c d e f g h       e | 
    6. | a b c d e f g h       f | 
    7. | a b c d e f g h       g | 
    8. | a b c d e f g h       h | 
    +---------------------------------------------+ 

ohne die Anführungszeichen, Stata werden versuchen, Sinn für a als Variable oder skalare Namen zu machen und aus der Patsche helfen, wenn das tut nicht arbeiten. Selbst wenn das funktioniert, wird es nicht in der Lage sein, zu verstehen, wie Sie es mit b kombinieren möchten, und wird dann retten.

Kurz gesagt, müssen Sie normalerweise "" mit literalen Zeichenfolgen umgehen. Die matrix *names Befehle sind speziell, da ihre Eingaben notwendigerweise Literalstrings sind (auch wenn sie numerische Zeichen sind).

+0

Danke, Nick. Ich war nach dem 3. deiner Interpretationen. Ich war mir des Befehls "world()" nicht bewusst. – StatsScared

+0

OK, aber es ist 'word()' nicht 'world()' und es ist eine Funktion, kein Befehl. –