[英]Using SQL in SAS, how do I create a new column that counts/indicates the uniqueness of values in an existing column..?
我的數據如下:
ID
1
2
3
3
4
5
6
6
我想創建一列,以指示ID列中值的唯一性,例如:
ID COUNT
1 1
2 1
3 1
3 0
4 1
5 1
6 1
6 0
我想不通過子查詢或其他方式創建臨時表來執行此操作。 任何幫助將不勝感激。
一種選擇是在數據步驟中按功能使用:
data have;
input ID;
datalines;
1
2
3
3
4
5
6
6
;run;
data want;
set have;
by ID;
if first.ID then count = 1;
else count = 0;
run;
這種類型的邏輯實際上並不適合SQL,因為觀察順序並沒有真正得到保證。 在更現代的SQL版本中,您可以使用開窗函數(例如ROW_NUMBER()和PARTITION BY)來施加記錄計數。
如果您真的想嘗試僅在PROC SQL中執行此操作,則可能需要使用未記錄的MONOTONIC()
函數。 但是,即使這樣,要使優化程序消除消除重復行的行為,您可能仍需要先使用行計數器創建一個臨時表。
data have;
input ID @@;
datalines;
1 2 3 3 4 5 6 6
;
proc sql ;
create table _temp_ as select id,monotonic() as row from have;
create table want as
select a.id
, b.row=min(b.row) as FLAG
from have a,_temp_ b
where a.id=b.id
group by a.id
order by 1,2
;
quit;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.