我有以下数据集作为输入
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 来执行此操作?
我有以下数据集作为输入
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 来执行此操作?
或者 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;
proc sql noprint;
create table test as select distinct id, count(id)
from your_table
group by ID
order by ID
;
quit;
试试这个:
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;
PROC SORT DATA=YOURS NOPRINT;
BY ID; RUN;
PROC MEANS DATA=YOURS;
VAR ID;
BY ID;
OUTPUT OUT=NEWDATASET N=; RUN;
您还可以选择在新数据集中仅保留 Id 和N变量。
我们可以使用简单的 PROC SQL 计数来做到这一点:
proc sql;
create table want as
select id, count(id) as count_of_id
from have
group by id;
quit;
这是另一种可能性,通常称为 DoW 结构:
Data want;
do count=1 by 1 until(last.ID);
set have;
by id;
end;
run;
如果您要进行的聚合很复杂,则仅使用 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;
或者
只需拖放您要聚合的列并在摘要选项中选择您要执行的任何操作,例如 Avg、Count、miss、NMiss 等。