有没有办法做一个过分区来获取sas上的行号? 在sql我会像:
Select region,company, ROW_NUMBER() OVER(PARTITION BY region ORDER BY Name)
From companyData;
我想在数据集
中执行此操作答案 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
窗口函数,您必须按 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
语句对应于ANSI SQL中的PARTITION BY
子句,但PROC SORT
步骤也按ORDER BY
子句中的列排序。另请注意,如果您要“迁移”的查询包含ORDER BY
SQL子句,则必须使用另一个PROC SORT
步骤进行此操作。