2012-04-27 63 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;