在 SAS 中创建观察之前测试条件,在输入语句末尾使用'@'

  • 本文关键字:语句 创建 SAS 观察 测试 条件 sas
  • 更新时间 :
  • 英文 :


我已经阅读了在线文档,从中,我认为它仅适用于列输入法。如何将其与列表输入法一起使用?

/这行得通/

data new;
input height 25-26 @;
if height = 6 ;
input name $ 1-8 colour $ 9-13 place $ 16-24 ;
datalines;
Deepak  Red    Delhi    6
Aditi   Yellow Delhi    5
Anup    Blue   Delhi    5
Era     Green  Varanasi 5
Avinash Black  Noida    5
Vivek   Grey   Agra     5
;
run;

/* 但这没有*/

data new;
input height @;
if height = 6;
input name $ colour $ place $ height;
datalines;
Deepak Red Delhi 6
Aditi Yellow Delhi 5
Anup Blue Delhi 5
Era Green Varanasi 5
Avinash Black Noida 5
Vivek Grey Agra 5
;
run;
LOG:
NOTE: Invalid data for height in line 79 1-6.
79         Deepak  Red    Delhi    6
height=. name=  colour=  place=  _ERROR_=1 _N_=1
NOTE: Invalid data for height in line 80 1-5.
80         Aditi   Yellow Delhi    5
height=. name=  colour=  place=  _ERROR_=1 _N_=2

第一条数据线的固定布局使得从特定位置输入字段成为可能。

第二种布局在布局上是可变的,因此很难任意抓取特定字段。

那么,出了什么问题呢?在第二个 DATA 步骤中,input将从行首读取,因此它不会从名称所在的位置读取数字。

不要担心通过仅读取一行的一部分来"减少处理"。 保持输入和条件处理更常用于处理内容中具有某种变体或条件数据项的数据行。

对于这两种格式,我将读取所有变量,然后添加逻辑以根据值进行过滤。

如果你真的需要在决定如何阅读该行之前检查行上的最后一个"单词"是否符合某些条件,那么你可能想尝试使用自动_infile_变量。

data new;
input @ ;
if scan(_infile_,-1,' ') = '6';
input name $ colour $ place $ height;
datalines;
Deepak Red Delhi 6
Aditi Yellow Delhi 5
Anup Blue Delhi 5
Era Green Varanasi 5
Avinash Black Noida 5
Vivek Grey Agra 5
;

最新更新