【问题标题】:group by in sas在 sas 中分组
【发布时间】:2012-04-27 14:17:41
【问题描述】:

我有以下数据集作为输入

ID  
--  

1  
2  
2  
3  
4  
4  
4  
5  

并且需要一个新的数据集如下

ID   count of ID  
--   -----------

1    1  
2    2  
3    1  
4    3  
5    1  

能否请您告诉如何在不使用 PROC SQL 的情况下在 SAS 中执行此操作?

【问题讨论】:

    标签: sas


    【解决方案1】:

    或者 Proc Freq 或 Proc Summary 怎么样?这避免了对数据进行预排序。

    proc freq data=have noprint;
    table id / out=want1 (drop=percent);
    run;
    
    proc summary data=have nway;
    class id;
    output out=want2 (drop=_type_);
    run;
    

    【讨论】:

      【解决方案2】:
      proc sql noprint;
      create table test as select distinct id, count(id)
      from your_table
      group by ID
      order by ID
      ;
      quit;
      

      【讨论】:

      • 你好,不使用PROC SQL可以吗??
      • 只是好奇——为什么不使用 SQL?
      • 您好,您可以通过使用像 Carolina 这样的数据步骤来避免 sql。
      • 我喜欢 sql 的强大功能!
      【解决方案3】:

      试试这个:

      DATA Have; 
       input id ; 
       datalines;
       1
       2
       2
       3
       4
       4
       4
       5 
       ;
      
      Proc Sort data=Have;
       by ID;
      run;
      
      Data Want;
       Set Have;
       By ID;
       If first.ID then Count=0;
       Count+1;
       If Last.ID then Output;
      Run;
      

      【讨论】:

      • 非常感谢!!!!!!!!!!!!!!!!!!我已经开始学习 SAS,因为我的问题很简单
      【解决方案4】:
      PROC SORT DATA=YOURS NOPRINT;
        BY ID; RUN;
      PROC MEANS DATA=YOURS;
        VAR ID;
        BY ID;
      OUTPUT OUT=NEWDATASET N=; RUN;
      

      您还可以选择在新数据集中仅保留 Id 和 N 变量。

      【讨论】:

        【解决方案5】:

        我们可以使用简单的 PROC SQL 计数来做到这一点:

         proc sql;
         create table want as
            select id, count(id) as count_of_id 
            from have
            group by id;
         quit;
        

        【讨论】:

          【解决方案6】:

          这是另一种可能性,通常称为 DoW 构造:

          Data want;
            do count=1 by 1 until(last.ID);
              set have;
              by id;
              end;
          run;
          

          【讨论】:

            【解决方案7】:

            如果您要进行的聚合很复杂,那么只使用 PROC SQL,因为我们更熟悉 SQL 中的 Group by

            proc sql ;
            create table solution_1 as select distinct ID, count(ID)
            from table_1
            group by ID
            order by ID
            ;
            quit;
            

            • 如果您使用的是 SAS-EG 查询构建器在小型 分析。

            只需拖放您要聚合的列并在摘要选项中选择您要执行的任何操作,例如 Avg、Count、miss、NMiss 等。

            【讨论】:

            • 当然,首先,深入研究一下问题:how to do this in SAS **without using PROC SQL?**其次,您复制了第三个答案。
            猜你喜欢
            • 1970-01-01
            • 2015-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-07
            相关资源
            最近更新 更多