簡體   English   中英

在SAS中使用SQL,我如何創建一個新列來計算/指示現有列中值的唯一性。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM