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

时间:2018-05-15 10:24:14

标签: 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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

如果你真的需要检查最后一个"单词"在决定如何阅读该行之前,该行符合某些条件,那么您可能想尝试使用自动_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
;