2012-04-27 65 views
2

我有下面的数据集作为输入组通过SAS

ID 
-- 

1 
2 
2 
3 
4 
4 
4 
5 

,需要一个新的数据集如下

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

1 1 
2 2 
3 1 
4 3 
5 1 

你能告诉如何在SAS做到这一点wihtout使用PROC 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; 
+0

很多THANKs !!!!!!!!!!!!!!!!!我已经开始学习SAS数据,我的问题非常简单 – athresh 2012-04-27 14:30:51

5
proc sql noprint; 
create table test as select distinct id, count(id) 
from your_table 
group by ID 
order by ID 
; 
quit; 
+0

非常简洁...尼斯 – 2012-04-27 14:29:35

+0

嗨,有没有可能不使用PROC SQL? – athresh 2012-04-27 14:30:03

+0

只是好奇 - 为什么不使用SQL? – itzy 2012-04-27 14:32:22

7

或者怎么样PROC频率或PROC总结?这些避免了必须预先处理数据。

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; 
0
PROC SORT DATA=YOURS NOPRINT; 
    BY ID; RUN; 
PROC MEANS DATA=YOURS; 
    VAR ID; 
    BY ID; 
OUTPUT OUT=NEWDATASET N=; RUN; 

您也可以选择只保留ID和你的newdataset ñ变量。

-1

如果你想要做的聚集是复杂的,然后用PROC SQL只去像我们比较熟悉的集团在SQL

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

OR

  • 如果您正在使用SAS-EG查询构建器在小型 分析中非常有用。

这只是拖动&下降ü要聚集的列和选择要像平均执行任何操作摘要选项,计数,小姐,NMiss等。

+0

嗨,这是我的第一个答案。你能告诉我答案的错误或Downvoting的原因吗?谢谢.. – 2016-11-17 13:24:40

+0

当然,首先,深入研究一下这个问题:“如何在不使用PROC SQL的情况下在SAS **中执行此操作?”**其次,您重复了第三个答案。 – McNets 2016-11-17 15:42:40

+0

重复的原因就像我想说的一样...我只是想添加一个点,如果一个人使用SAS EG,他/她可以使用查询生成器进行此类分析。 – 2016-11-17 17:31:48

0

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

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

这里是另一种可能性,常常被称为陶氏建筑:

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