sas で行番号を取得するために over partition を実行する方法はありますか? SQLでは、次のようになります:
Select region,company, ROW_NUMBER() OVER(PARTITION BY region ORDER BY Name)
From companyData;
できればデータセットでこれを行いたい
sas で行番号を取得するために over partition を実行する方法はありますか? SQLでは、次のようになります:
Select region,company, ROW_NUMBER() OVER(PARTITION BY region ORDER BY Name)
From companyData;
できればデータセットでこれを行いたい
by ステートメントを使用してデータ ステップで簡単に実行できます。 it と do a running sum :
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
でデータ セットを並べ替える必要があります。後続のデータ ステップでは、並べ替えられたデータ セットはパーティション変数によってのみ設定され、自動変数制御を使用して新しい行番号変数が割り当てられます。PARTITION
ORDER BY
SET
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
データ ステップのステートメントはPARTITION BY
ANSI SQL の句に対応しますが、PROC SORT
ステップは句の列によっても並べ替えられることに注意してくださいORDER BY
。また、「移行」しているクエリにORDER BY
SQL 句が含まれている場合は、これに続いて別のPROC SORT
手順を実行する必要があることに注意してください。