【问题标题】:Set macro variable to frequency count from proc freq将宏变量设置为来自 proc freq 的频率计数
【发布时间】:2015-08-05 01:49:42
【问题描述】:

是否可以创建一个宏变量,将其设置为 proc freq 产生的频率变量?我正在尝试创建一个变量,该变量将等于每个姓氏在数据集中出现的次数。例如,Smithe 可能出现 3 次,而 Jackson 仅出现 2 次。我想抓住那个价值并加以利用。

【问题讨论】:

    标签: sas


    【解决方案1】:

    您可以在以下数据步骤中使用call symput(在将proc freq 输出到具有/out= 和/或使用ods output 的数据集之后),或者您可以避免proc freq 并执行频率通过select into 使用proc sql,这将创建一个宏变量。

    proc sql;
      select sex, count(1) 
        into :sex separated by ' ',
             :count separated by ' '
        from sashelp.class
        group by sex;
    quit;
    

    这使得某些东西近似于一对宏变量数组(一个带有值,一个带有计数)。如果您想使用名称(或其他名称)作为宏变量名称,请使用第一个选项(使用 call symput 的后续数据步),因为它可以让您命名宏变量。

    【讨论】:

    • 有点离题,但是,我没有看到之前使用的符号count(1),这让我想知道它和count(*)之间是否有区别。我猜不是:stackoverflow.com/questions/1221559/count-vs-count1 .
    • @RobertPenr​​idge 我相信这是特定于实现的;我认为在 SAS 中类似于 SQL Server(没有区别)。许多 Oracle DBA 告诉我,在 Oracle 中,它确实会影响执行速度。因为 Oracle 是我第一次真正学习 SQL 的地方,所以我一直坚持。 (显然它不再对 Oracle 产生影响,但自从我在几年前从多年前学习它的人那里学到了......)
    • 老实说,我可能应该停止使用 count(1),因为此时它基本上是在传播一个城市神话,但既然每个人都知道老程序员永远不会改变他们的技巧......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多