如何使用SAS来计算列中每个观察的频率,如R中所示

时间:2016-05-15 19:00:43

标签: sas frequency

我只想知道R table()中每个变量的总频率。我可以在SAS中这样做吗?

我有一个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知道R table()

中Level和SCORE的频率

对于变量' Level'

A2 A3 A4 A5 A6
 1  2  2  2  2

对于变量' SCORE'

0.2 0.3 0.6 0.8
  5   1   2   1

1 个答案:

答案 0 :(得分: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;