3

我有以下数据集作为输入

ID  
--  

1  
2  
2  
3  
4  
4  
4  
5  

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

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

1    1  
2    2  
3    1  
4    3  
5    1  

您能否告诉如何在 SAS 中使用 PROC SQL 来执行此操作?

4

7 回答 7

7

或者 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;
于 2012-04-27T14:59:42.363 回答
5
proc sql noprint;
create table test as select distinct id, count(id)
from your_table
group by ID
order by ID
;
quit;
于 2012-04-27T14:26:22.857 回答
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;
于 2012-04-27T14:28:39.520 回答
0
PROC SORT DATA=YOURS NOPRINT;
  BY ID; RUN;
PROC MEANS DATA=YOURS;
  VAR ID;
  BY ID;
OUTPUT OUT=NEWDATASET N=; RUN;

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

于 2015-10-12T19:56:18.853 回答
0

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

 proc sql;
 create table want as
    select id, count(id) as count_of_id 
    from have
    group by id;
 quit;
于 2017-05-22T14:06:20.903 回答
0

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

Data want;
  do count=1 by 1 until(last.ID);
    set have;
    by id;
    end;
run;
于 2017-12-08T14:12:19.557 回答
-1

如果您要进行的聚合很复杂,则仅使用 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 等。

于 2016-11-17T11:54:31.470 回答