Nierzadko zdarza się, że tabulacja krzyżowa dwóch zmiennych daje komórki z zerową liczbą. Na przykład, w poniższym przykładzie danych nie ma przypadków, w których płeć = 2 ieth = 2. Poniższy zbiór danych zawiera trzy zmienne. Dwie zmienne, gender i eth, są zmiennymi kategorycznymi, które chcemy poddać tabulacji krzyżowej. Trzecią zmienną jest count, która jest wagą częstotliwości, wskazującą liczbę przypadków z tym wzorcem w zbiorze danych, tj. istnieje 21 przypadków, w których gender=1 i eth=3.
data test; input gender eth count;datalines;1 1 121 2 121 3 212 1 22 3 43;run;
Gdy uruchomimy proc freq bez opcji list, w tabeli znajdzie się komórka z zerową liczbą przypadków (np. gender=2 i eth=2). Deklaracja weight określa, że zmienna count powinna być użyta do określenia liczby przypadków z każdym wzorcem w zbiorze danych.
proc freq data = test; weight count; table gender*eth;run; The FREQ Procedure Table of gender by ethgender ethFrequencyPercent Row Pct Col Pct 1 2 3 Total 1 12 12 21 45 13.33 13.33 23.33 50.00 26.67 26.67 46.67 85.71 100.00 32.81 2 2 0 43 45 2.22 0.00 47.78 50.00 4.44 0.00 95.56 14.29 0.00 67.19 Total 14 12 64 90 15.56 13.33 71.11 100.00
Wykonanie proc freq z opcją list, jak pokazano poniżej, tworzy tabelę bez wiersza dla gender=2 i eth=2, ponieważ liczba przypadków dla tej kombinacji wynosi zero.
proc freq data = test; weight count; table gender*eth /missprint list;run; Cumulative Cumulativegender eth Frequency Percent Frequency Percent 1 1 12 13.33 12 13.33 1 2 12 13.33 24 26.67 1 3 21 23.33 45 50.00 2 1 2 2.22 47 52.22 2 3 43 47.78 90 100.00
Możliwe jest, przy odrobinie pracy, uzyskanie tabeli takiej jak ta powyżej, która nie zawiera brakującej komórki. Pierwszym krokiem jest stworzenie zmiennej, która jest stałą równą jeden. Zrobimy to poniżej, używając zmiennej o nazwie one.
data test; set test; one = 1;run;
Następnie użyjemy ods, aby przechwycić dane wyjściowe z uruchomienia proc means. Opcja summary = t nakazuje SAS-owi przechowywać podsumowanie uzyskane przez proc means w zbiorze danych t. W poleceniu proc means opcja n określa, że obliczane ma być tylko n (tj. liczba przypadków). Opcja completetypes określa, że wszystkie kombinacje zmiennych klasy (płeć i etniczność) powinny być wymienione, łącznie z tymi, których liczba w zbiorze danych wynosi zero; w przeciwnym razie byłyby one pominięte. Opcja freq określa, że zmienna count powinna być użyta jako liczba przypadków, które są zgodne z danym wzorcem w zbiorze danych (tzn. w tym przykładzie opcja freq robi w proc means to, co zrobiła w proc freq). Deklaracja var wskazuje zmienną, o której należy obliczyć statystykę; tutaj używana jest zmienna one.
ods output summary = t;proc means data = test n completetypes; class gender eth; freq count; var one;run; The MEANS Procedure Analysis Variable : onegender eth N Obs N 1 1 12 12 2 12 12 3 21 21 2 1 2 2 2 0 0 3 43 43
Tworzy to zbiór danych t (pokazany poniżej) z sześcioma obserwacjami, po jednej dla każdej kombinacji eth według płci, z których obie pojawiają się jako zmienne w naszym nowym zbiorze danych. Nowy zbiór danych zawiera również zmienną o nazwie one_N, która jest liczbą przypadków, które mieszczą się w każdej z kategorii płci według etniczności (włączając w to liczbę 0, gdzie jest to właściwe).
proc print data=t;run;Obs gender eth NObs one_N 1 1 1 12 12 2 1 2 12 12 3 1 3 21 21 4 2 1 2 2 5 2 2 0 0 6 2 3 43 43
Teraz możemy uruchomić proc freq na nowym zbiorze danych t. Instrukcja weight używa one_N jako zmiennej zawierającej liczbę przypadków z danym wzorcem zmiennych. Opcja /zeros nakazuje SAS-owi włączenie do listy przypadków, w których one_N = 0. Wynikowa lista zawiera wiersz dla kombinacji płci i etniczności z liczbą zero.
proc freq data = t; table gender*eth /list; weight one_N /zeros;run; The FREQ Procedure Cumulative Cumulativegender eth Frequency Percent Frequency Percent 1 1 12 13.33 12 13.33 1 2 12 13.33 24 26.67 1 3 21 23.33 45 50.00 2 1 2 2.22 47 52.22 2 2 0 0.00 47 52.22 2 3 43 47.78 90 100.00