Sasの行番号を取得するためにオーバーパーティションを作成する方法はありますか? SQLでは私は次のようになります:
Select region,company, ROW_NUMBER() OVER(PARTITION BY region ORDER BY Name)
From companyData;
私はできればデータセットでこれをしたい
Byステートメントを使用して、データステップで簡単に実行できます。
proc sort data=myData; by region name; run;
Data myData;
Set myData;
By company;
if first. company then n=1;
else n+1;
run;
また、組み込みの機能を使用できるすべてのobsをennmuareteするには:
DATA COMPANYDATA;
SET COMPANYDATA;
ROW_NUM=_N_;
RUN;
Joeが述べたように、そのグループ内で取得するobsの量に応じて、row_numのフォーマットを設定することができます。
SQL ROW_NUMBER
ウィンドウ関数を複製するには、データセットをbothPARTITION
およびORDER BY
句でソートする必要があります。後続のデータステップでは、パーティション変数によってSET
並べ替えられたデータセットonlyを使用し、FIRST.
自動変数コントロールを使用して新しい行番号変数を割り当てます。
ここにあなたが述べた例の解決策があります:
proc sort data=companyData;
by region name;
run;
data want;
set companyData;
by region;
if first.region then row_number = 1;
else row_number + 1;
run;
データステップのBY
ステートメントはANSI SQLのPARTITION BY
句に対応していますが、PROC SORT
ステップもORDER BY
句の列で並べ替えられています。また、「移行中」のクエリにORDER BY
SQL句が含まれている場合は、これに続いて別のPROC SORT
ステップを実行する必要があります。