Тестирование условия перед созданием наблюдений в SAS с использованием «@» в конце оператора ввода - PullRequest
0 голосов
/ 15 мая 2018

Я прочитал онлайн-документ и думаю, что он работает только с методом ввода столбцов. Как это можно использовать с методом ввода списка?

/ Это работает /

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 голосов
/ 15 мая 2018

Для обоих этих форматов я прочитал бы все переменные, а затем добавил логику для фильтрации на основе значений.

Если вам действительно нужно проверить, соответствует ли последнее «слово» в строке каким-либо критериям, прежде чем решить, КАК прочитать строку, то вы можете попробовать использовать автоматическую переменную _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
;
0 голосов
/ 15 мая 2018

Фиксированная разметка первых строк данных позволяет вводить поле из определенного места.

Второй макет является переменным в макете, поэтому сложнее произвольно захватить конкретное поле.

Итак, что не так? На втором шаге DATA input будет читать с начала строки, поэтому он не будет читать число с того места, где находится имя.

Не беспокойтесь об «сокращении обработки», читая только часть строки. Задержанная вводная и условная обработка чаще используется для обработки строк данных, которые имеют некоторый вариант или условные элементы данных в содержимом.

...