我想在我的数据存储中发频,但我不知道如何制作它。我无法使用程序。我想做出类似的东西:
但现在我只有两个第一列。我不知道如何除以第二列的所有数据的总和。谢谢你的帮助。
编辑: 我的代码得到两个第一列:
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;
答案 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;