You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SAS first.变量生成分组计数结果不符合预期求助

问题分析与解决

你的代码逻辑本身是正确的,但出现不符合预期的结果,大概率是因为Actor_Name字段存在隐形字符差异(比如前后空格、大小写不一致),导致第三条Marry Dryn被SAS识别为新的分组,触发first.Actor_Name条件将counter重置为1。

修正方案1:清理字符后再处理

先对Actor_Name做去空格处理,消除隐形差异,再执行排序和分组计数:

DATA a ;
    INFILE DATALINES DSD DLM='|'  ;
    LENGTH Actor_Name $20 ;
    INPUT Actor_Name $ Total ;
    * 去除前后空格;
    Actor_Name = STRIP(Actor_Name);
    DATALINES ;
    Julie Maze | 1
    Julie Maze | 1
    Julie Maze | 1
    Marry Dryn | 1
    Marry Dryn | 1
    Marry Dryn | 1
    ;
RUN ;

PROC SORT DATA = work.a OUT = a_sorted ;
    BY Actor_Name ;
RUN ;

DATA b ;
    SET work.a_sorted ;
    BY Actor_Name ;
    IF first.Actor_Name THEN counter = 1 ;
    ELSE counter + 1 ;
RUN ;

修正方案2:使用PROC SQL窗口函数(更简洁)

无需手动排序,直接用窗口函数实现分组内的序号生成:

DATA a ;
    INFILE DATALINES DSD DLM='|'  ;
    LENGTH Actor_Name $20 ;
    INPUT Actor_Name $ Total ;
    DATALINES ;
    Julie Maze | 1
    Julie Maze | 1
    Julie Maze | 1
    Marry Dryn | 1
    Marry Dryn | 1
    Marry Dryn | 1
    ;
RUN ;

PROC SQL ;
    CREATE TABLE b AS
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY STRIP(Actor_Name) ORDER BY Actor_Name) AS counter
    FROM a ;
QUIT ;

两种方案都能得到你预期的结果:每组counter依次为1,2,3。

内容的提问来源于stack exchange,提问作者Eyal Marom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:29:56