使用sas获取数据步骤中的行号

时间:2013-06-09 05:32:24

标签: sas

有没有办法做一个过分区来获取sas上的行号? 在sql我会像:

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

我想在数据集

中执行此操作

2 个答案:

答案 0 :(得分:7)

您可以使用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;

另外,为了使所有障碍物都可以使用内置功能:

DATA COMPANYDATA;
SET COMPANYDATA;
ROW_NUM=_N_;    
RUN;

正如Joe所说,你可能想要为row_num设置格式,具体取决于你在该分组中获得多少障碍。

答案 1 :(得分:2)

要复制SQL ROW_NUMBER窗口函数,您必须按 PARTITIONORDER 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语句对应于ANSI SQL中的PARTITION BY子句,但PROC SORT步骤也按ORDER BY子句中的列排序。另请注意,如果您要“迁移”的查询包含ORDER BY SQL子句,则必须使用另一个PROC SORT步骤进行此操作。