2016-05-15 2 views
1

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

У меня есть набор данных SAS следующим образом.

data level_score; 
infile datalines; 
input ID $ Level $ SCORE; 
return; 
datalines; 

    1 A2 0.2 
    2 A3 0.8 
    3 A4 0.3 
    4 A5 0.2 
    5 A6 0.2 
    6 A3 0.6 
    7 A4 0.2 
    8 A5 0.6 
    9 A6 0.2 
; 
run; 

proc print data=level_score; 
run; 

Я хочу использовать SAS знать частоту уровня и SCORE, как в R таблицы()

Для переменной 'Level'

A2 A3 A4 A5 A6 
1 2 2 2 2 

Для переменной 'SCORE'

0.2 0.3 0.6 0.8 
    5 1 2 1 
+0

Взгляните на PROC FREQ – lmo

+0

Спасибо за информацию. Я новичок в SAS и R. Теперь я знаю, как его решить. 'proc freq data = level_score; столы Level; run; '-> as in R table (Level) –

+0

Возможный дубликат [Есть ли эквивалент таблицы функций R в SAS?] (Http://stackoverflow.com/questions/40216924/is-there-an -эквивалент-к-r-function-table-in-sas) – Snorex

ответ

1

Самый простой способ - использовать proc freq, как вы узнали.

proc freq data=level_score; 
    table Level; 
run; 

Есть, однако, несколько других способов подсчета частот. Вот только два из них.

Отображение частоты с использованием proc sql

proc sql; 
    select Level, 
     count(*) as Freq 
    from level_score 
    group by Level; 
quit; 

Результаты:

Level Freq 
    A2 1 
    A3 2 
    A4 2 
    A5 2 
    A6 2 

Показать частоты на журнал с помощью data step

* First we need to sort the data by the variable of interest; 
proc sort data=level_score out=Level_sorted; 
    by Level; 
run; 

* Then we use the `by` statement with a retain variable, ; 
* here called "count". ; 
data _null_; 
    set Level_sorted; 
    by Level; 
    count + 1; 
    if last.Level then do; 
    put "Frequency for Level " Level ": " count; 
    count = 0; 
    end; 
run; 

В журнале отображается:

Frequency for Level A2 : 1 
Frequency for Level A3 : 2 
Frequency for Level A4 : 2 
Frequency for Level A5 : 2 
Frequency for Level A6 : 2 

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

data Level_freqa; 
    set level_sorted; 
    by Level; 
    count + 1; 
    if last.Level then do; 
    output; 
    count = 0; 
    end; 
    drop ID SCORE; 
run; 
+1

Большое вам спасибо! Я многому научился из ваших ответов. Это так здорово. Еще раз спасибо. –