2014-11-13 4 views
0

Я хотел бы получить частотную таблицу, в которой перечислены все переменные, но только указывается количество раз «-2», «-1» и « M "появляются в каждой переменной.Определение частоты ТОЛЬКО определенных значений во всех переменных набора данных

В настоящее время, когда я запускаю следующий код:

proc freq data=mydata; 
tables _ALL_ 
/list missing; 

я получаю одну таблицу для каждой переменной и все ее значения (иногда 100s). Могу ли я просто получить таблицы с тремя значениями, которые я хочу, и все остальное подавлено?

ответ

1

Вы можете сделать это несколькими способами.

Прежде всего, вы, вероятно, сначала захотите сделать это в наборе данных, чтобы вы могли фильтровать этот набор данных. Я бы использовал PROC TABULATE, но вы можете использовать PROC FREQ, если вам это нравится.

*make up some data; 
data mydata; 
    call streaminit(132); 
    array x[100]; 
    do _i = 1 to 50; 
    do _t = 1 to dim(x); 
     x[_t]= floor(rand('Uniform')*9-5); 
    end; 
    output; 
    end; 
    keep x:; 
run; 

ods _all_ close; *close the 'visible' output types; 
ods output onewayfreqs=outdata; *output the onewayfreqs (one way frequency tables) to a dataset; 
proc freq data=mydata; 
    tables _all_/missing; 
run; 
ods output close; *close the dataset; 
ods preferences; *open back up your default outputs; 

Затем отфильтруйте его, и как только вы сделали это, напечатайте его, как хотите. Обратите внимание, что в выводе PROC FREQ вы получаете столбец для каждой переменной - не очень полезно. Переменные F_ - это форматированные значения, которые затем могут быть объединены с использованием coalesce. Я предполагаю, что это все числовые переменные - определите f_val как символ и используйте coalescec, если есть какие-либо символьные переменные или переменные с применяемыми к ним форматами символов.

data has_values; 
    set outdata; 
    f_val = coalesce(of f_:); 
    keep table f_val frequency percent; 
    if f_val in (0,-1,-2); 
run; 

Последняя строка содержит только 0, -1, -2.

Смежные вопросы