9

sas で行番号を取得するために over partition を実行する方法はありますか? SQLでは、次のようになります:

  Select region,company, ROW_NUMBER()  OVER(PARTITION BY region ORDER BY Name)
    From companyData;

できればデータセットでこれを行いたい

4

2 に答える 2

8

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 の形式を設定することができます。

于 2013-06-09T05:35:14.850 に答える
3

SQL ウィンドウ関数を複製するには、句と節の両方ROW_NUMBERでデータ セットを並べ替える必要があります。後続のデータ ステップでは、並べ替えられたデータ セットはパーティション変数によってのみ設定され、自動変数制御を使用して新しい行番号変数が割り当てられます。PARTITIONORDER BYSETFIRST.

あなたが述べた例の解決策は次のとおりです。

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 BYANSI SQL の句に対応しますが、PROC SORTステップは句の列によっても並べ替えられることに注意してくださいORDER BY。また、「移行」しているクエリにORDER BYSQL 句が含まれている場合は、これに続いて別のPROC SORT手順を実行する必要があることに注意してください。

于 2013-06-09T13:59:30.977 に答える