Как подтвердить существование всех соответствующих переменных в списке переменных? - PullRequest
0 голосов
/ 09 мая 2018

Подобные темы не привели меня к решению следующей проблемы.

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

Я пробовал следующий код:

local vlist caseid midx hidx v000-v013 v016 v021-v025 v101 v102

foreach v of local vlist {
   capture confirm variable `v'
    if !_rc {
        display in red "variable exists"
    }
    else {
        display in red "variable does not exist"
    }
}

Код проходит, но ничего не отображается. Я также попытался преднамеренно вставить переменные в varlist, которых нет в наборе данных. Ничего не изменилось.

Кто-нибудь знает, как я могу преодолеть эту проблему?

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Если оставить в стороне проблему с отображением, вы можете взглянуть на пользовательскую команду checkfor2. Это даст вам три возврата, содержащие список с переменными, которые являются: а) несуществующими, б) существующими, но с множеством пропущенных и в) существующими и с несколькими пропусками.

0 голосов
/ 09 мая 2018

Когда я генерирую следующие игрушечные переменные:

clear 
set obs 5

local vlist caseid midx hidx v000 v013 v014 v015 v016 v021 v025 v101 v102

foreach v of local vlist { 
    generate `v' = runiform()
}

Это работает для меня:

foreach v of local vlist { 
    capture confirm variable `v' 

    if !_rc { 
       display in red "variable `v' exists" 
    } 

    else { 
        display in red "variable `v' does not exist"
    } 
}

variable caseid exists
variable midx exists
variable hidx exists
variable v000 exists
variable v013 exists
variable v014 exists
variable v015 exists
variable v016 exists
variable v021 exists
variable v025 exists
variable v101 exists
variable v102 exists

Если я отбрасываю переменную:

drop v000

(run the second loop again)

variable caseid exists
variable midx exists
variable hidx exists
variable v000 does not exist
variable v013 exists
variable v014 exists
variable v015 exists
variable v016 exists
variable v021 exists
variable v025 exists
variable v101 exists
variable v102 exists

Есливместо этого вы определяете свой локальный макрос vlist следующим образом:

local vlist caseid midx hidx v000 v013-v016 v021 v025 v101 v102

(run the second loop again)

variable caseid exists
variable midx exists
variable hidx exists
variable v000 exists
variable v013-v016 does not exist
variable v021 exists
variable v025 exists
variable v101 exists
variable v102 exists

Аналогично, если вы добавите две переменные var1 и var5, которые не существуют:

local vlist caseid midx hidx var1 v000 v013 v014 v015 v016 var5 v025 v101 v102

(run the second loop again)

variable caseid exists
variable midx exists
variable hidx exists
variable var1 does not exist
variable v000 exists
variable v013 exists
variable v014 exists
variable v015 exists
variable v016 exists
variable var5 does not exist
variable v025 exists
variable v101 exists
variable v102 exists
...