Различные случаи имени переменной после добавления

Я добавил несколько файлов в один набор данных sSata. Сейчас 335 имена переменных. Некоторые имена переменных имеют проблемы с регистром, такие как almirah а также ALMIRAH хранение одной и той же информации из разных наборов данных.

Я заменяю эти переменные, подобные этой, одной:

count if mi(almirah)
local first=r(N)

count if mi(ALMIRAH)
local sec=r(N)

if first<sec {
    replace almirah=ALMIRAH if mi(almirah)
}
else {

}

Как мне запрограммировать это для всех переменных, которые по сути являются одной и той же переменной, но имеют проблемы верхнего и нижнего регистра, подобные этой?

3 ответа

Решение

Предположим, у вас есть frog toad newt а также FROG TOAD NEWT, Давайте решим, что переменная с именем в нижнем регистре является окончательной. Таким образом, цикл с некоторым или всем этим может быть полезным.

foreach v in frog toad newt { 
    local V = upper("`v'") 
    generate `v'2 = cond(missing(`v'), `V', `v') 
    display  
}

Я создал новую переменную там, потому что могут быть другие проблемы. Если они есть, перезапись ваших данных может затенить их.

Примечание: в вашем сегменте кода вам нужно как минимум

 if `first' < `sec'

сделать его законным, как ссылки на first а также sec иначе будет интерпретироваться как ссылки на переменные или скаляры. Но на самом деле непонятно, почему количество пропущенных значений вообще существенно. Если у меня есть 42 наблюдения, то append Еще 66, результат должен быть таким же, как и наоборот.

Исходя из вашего описания, я думаю, что хорошим выбором для вас будет снижение всех имен переменных перед добавлением данных. Если это предположение верно, приведенный ниже код может дать вам подсказку.

clear
save output, emptyok replace

foreach file in file1 file2 file3 file4 {
    use `file', clear
    ren *, lower
    append using output
    save output, replace
}

Была похожая ситуация, вот как я ее решил.

      quietly ds
local dbvars = "`r(varlist)'"

foreach v in `dbvars' { 
local V = lower("`v'") 

// test if var exists
capture confirm variable `V'_synced 
if !_rc {
  di in red "`V'_synced  exists"
  replace `V'_synced  = cond(missing(`v'), `V', `v')  if missing(`V'_synced )
     }
  else {
     di in red "`V'_synced  does not exist"
  gen `V'_synced  = cond(missing(`v'), `V', `v') 
      }

}

// keep combined variables 
keep *_synced 

Другие вопросы по тегам