Stata: замените отрицательные значения отсутствующими и пропустите var, если замененные значения отсутствуют более 98% времени - PullRequest
0 голосов
/ 16 мая 2018

У меня есть набор данных с отрицательными значениями, указывающими на отсутствие (в основном это переменные байтового типа).Я хотел бы, чтобы все переменные заменяли все отрицательные значения отсутствующими (.) Значениями, а затем drop всеми переменными, для которых эти значения отсутствуют в более чем 98% наблюдений.По Google, я придумал следующее, но я получаю ошибку.

type mismatch
r(109);

glo p= 0.98
foreach var of varlist* {
    qui replace (`var') = . if (`var') < 0
    qui count if missing(`var')      
    if (r(N)/_N) >= $p drop `var'    
}

Я думал об использовании чего-то вроде

glo p= 0.98
foreach var of varlist* {
    if (`var') == type(byte)
    qui replace (`var') = . if (`var') < 0
    qui count if missing(`var')      
    if (r(N)/_N) >= $p drop `var'    
}

, но потом я получаю:

unknown function type()
r(133);

Любые предложения?

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

1 Ответ

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

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

ds, has(type numeric) 
local N = 0.98 * _N 
quietly foreach var in `r(varlist)' {
    replace `var' = . if  `var' < 0
    count if missing(`var')      
    if r(N) >= `N' drop `var'    
}

Примечания:

  1. Выможно использовать confirm, чтобы проверить, является ли переменная числовой или строковой, но здесь предлагается отфильтровать числовые переменные за один шаг.

  2. Вы ссылаетесь на глобальный p, но никогда не определяете его.

  3. Вы не можете установить любую константу или переменную в Stata с помощью операторов вида newname = value .(Мата, да!)

  4. if утверждение без действия не имеет смысла.Stata не будет действовать для последующих заявлений, если вы не используете скобки.

Как правило, лучше всего привести воспроизводимые примеры.

...