没有proc的SAS频率

时间:2016-03-09 23:52:41

标签: sas frequency

我想在我的数据存储中发频,但我不知道如何制作它。我无法使用程序。我想做出类似的东西:

object oriented programming

但现在我只有两个第一列。我不知道如何除以第二列的所有数据的总和。谢谢你的帮助。

编辑: 我的代码得到两个第一列:

data dir.table1 (keep = gender summ);
set dir.table0;
by gender;
if first.gender then summ=0;
summ+1;
if last.gender then output;
run;

1 个答案:

答案 0 :(得分:2)

如Reeza所述,执行此操作的标准方法是PROC FREQ。

至于其他解决方案:

<强> DATASTEP

你不能用一个Datastep做到这一点,因为你需要先计算总数。在我的示例中,我使用PROC SQL计算总数并将其存储在宏变量中,稍后使用它来计算百分比。您还需要保留变量sum,以便在每次观察时都不会重置它。

/* SELECT total number of rows and store it in a macro variable */
PROC SQL ;
    SELECT COUNT(*) INTO :total FROM dir.table0;
QUIT;

DATA dir.table1 (KEEP=gender summ pct_tot);
    SET dir.table0;
    BY gender;

    /* Retain will keep the running total as you go through the dataset */
    RETAIN summ;

    IF first.gender THEN
        summ=0;

    summ+1;

    IF last.gender THEN DO;
        /* Calculate the percentage */
        pct_tot=summ / &total;
        OUTPUT;
    END;
RUN;

PROC SQL

通过汇总非协调子查询中的总记录数,恕我直言SQL提供了一种更加简洁的获取频率的方法:

PROC SQL;
   CREATE TABLE dir.table1 AS 
   SELECT gender, 
          SUM(gender) AS summ, 
          SUM(gender) / (SELECT COUNT(*) FROM dir.table0) AS pct_tot
     FROM dir.table0
    GROUP BY gender;
QUIT;