Отслеживайте, сколько новых переменных было создано, разбив строку - PullRequest
0 голосов
/ 07 сентября 2018

Я использую команду split для разделения переменной, в которой несколько строк разделены точкой с запятой. Я также хотел бы отследить, сколько новых строковых переменных было создано в результате разбиения исходной строковой переменной, и сохранить ее в локальном макросе.

Так, например, если мои исходные данные имеют вид:

State

PA;CA
MA
WA;CA;OR

А я пользуюсь split State, p(;):

State     State1 State2 State3

PA;CA      PA     CA
MA         MA
WA;CA;OR   WA     CA     OR

Я бы хотел найти, что он создал 3 новые переменные, и сохранить это значение в локальном макросе.

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

В общем, вы можете использовать команду ds:

clear

input str10 State
"PA;CA"
"MA"
"WA;CA;OR"
end

split State, p(;)
drop State

ds State*
State1  State2  State3

return list

macros:
            r(varlist) : "State1 State2 State3"

local states : word count `r(varlist)'
display `states'
3

Очевидно, что делать это здесь после split не нужно.

0 голосов
/ 07 сентября 2018

Многие команды Stata оставляют после себя полезные объекты, и split не является исключением.

Из файла справки (который вы можете найти, набрав help split):

Stored results

    split stores the following in r():

    Scalars   
      r(nvars)       number of new variables created
      r(varlist)     names of newly created variables

Это можно использовать так:

clear

input str11 states
"PA;CA"
"MA"
"WA;CA;OR;PA"
end

compress
split states, parse(;) gen(S)

display `: word count `r(varlist)''
display r(nvars)

Второй, вероятно, проще.

...