2016-08-31 2 views
0

Я новый пользователь SAS. Надеюсь, ты сможешь мне помочь. Например, у меня есть набор данных с 35 категориальными переменными.
cat1 cat2 cat3 cat4 ... cat35
Я хочу создать таблицу, состоящую из результата проверки независимости между всеми возможными комбинациями двух категориальных переменных и ее p-значений.
Я использовал proc freq, но я могу сделать это только вручную, по две переменные за раз. Чтобы сэкономить время, я думаю использовать макрос, но я не знаю, как это сделать.SAS Independence Test Loop

Выходной сигнал представляет собой таблицу
Variable1 | Variable2 | P-value
----------------------------------------------
cat1 | cat2 | p-value of cat1 & cat2
cat1 | cat3 | p-value of cat1 & cat3
...
cat34 | cat35 | p-value of cat34 & cat35

Открыт для предложений. Благодаря!

Edit: Мой текущий код
proc freq data = mydata; tables cat1*cat2/chisq; output out=myoutput pchi cramv; run;
proc sql; create table myoutput as select "cat1" as X, "cat2" as Y, P_PCHI from myoutput; quit;
Это даст таблицу
X | Y | P-value
-----------------------------------
cat1 | cat2 | p-value of cat1 & cat2

+1

Вы можете включить код, который вы хотите использовать, чтобы сделать это с помощью одной переменной пары, пожалуйста, а некоторые образцы данных с несколькими переменными? – Joe

+0

Да, нам понадобится подробнее подробнее –

+0

Я обновил свой ответ - думаю, теперь он делает то, что вы хотите. – user667489

ответ

1

Я думаю, вы должны быть в состоянии сделать это, используя следующие синтаксис для оператора таблиц в вашем запросе freq:

tables (cat1-cat35) * (cat1-cat35); 

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

data example; 
    do cat1 = 'a','b','c'; 
    do cat2 = 'd','e','f'; 
     do cat3 = 'g','h','i'; 
     output; 
     end; 
    end; 
    end; 
run; 

ods output chisq = mychisq(where = (statistic = 'Chi-Square')); 

proc freq data = example; 
tables (cat1-cat3) * (cat1-cat3)/chisq; 
output out=myoutput pchi cramv; 
run; 

Это дает выход в несколько ином формате, но вы должны быть в состоянии разобраться оттуда.

+0

Вы уверены, что это работает? Этот синтаксис для меня совсем не работает –

+0

@JonathanWilson Пример добавлен. – user667489

0

один способ перебора всех пар сделать

do i=1 to 34; 
    do j=i+1 to 35; 
     .....