我正在尝试使用sas first.value,但得到的结果与预期不同

I am trying to use sas first.value, but get different results then expected

提问人:Eyal Marom 提问时间:11/17/2023 更新时间:11/18/2023 访问量:35

问:

我正在尝试运行此代码进行基本演示:

[![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 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 ;][1]][1]

我希望看到 6 条数据线,其中新的列“计数器”将为每个Actor_Name组显示 1、2、3 和 1、2、3。但我得到 1,2,3 和 1,2,1

SAS公司

评论

0赞 Tom 11/17/2023
为什么您的数据线是缩进的?这只会让SAS程序员感到困惑,并让愚蠢的文本编辑有机会用制表符替换空格。

答:

0赞 Richard 11/17/2023 #1

第 6 个排序的数据行中可能有一个控制字符,也许是一个选项卡?

运行您发布的内容会得到 1,2,3,1,2,3。您的实际数据线可能具有硬空间“A0”x。尝试在日志中查看您实际拥有的内容。PUT name $HEX40.;

评论

0赞 Eyal Marom 11/17/2023
不。无控制字符
0赞 Eyal Marom 11/18/2023
在 5ht 行中,我有空格而不是缩进。我会考虑您的评论,谢谢。
0赞 Tom 11/18/2023
什么是“空格而不是缩进”?
1赞 Tom 11/17/2023 #2

你的程序对我来说很好用。

enter image description here

但当然,我在显示管理器中运行了它,它会在提交代码时将制表符转换为空格。

我建议不要缩进数据行。拥有所有这些额外的空间只会让人很难看到线上的内容。它还为愚蠢的文本编辑器提供了用制表符替换空格的机会。

您也不应缩进 DATALINES 语句,以便提醒您和程序编辑器在第一列中开始键入。

在数据步骤结束后,也不需要有一个空步骤。

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
;