2016-04-04 2 views
0

У меня вопрос о SAS, что если инструкция. Говорят, что мы имеем следующую программу:SAS Что делать, если аналитический интервал данных с пробелами

data work.stress; 
infile tests; 
input ID Name $ Tolerance; 
if tolerance <= 5 then tolerance = "Low"; 
else if tolerance >= 6 then tolerance = "High"; 
run; 

Я знаю, мы всегда должны убедиться, что интервалы данных не имеет никакого разрыва между ними, а просто сказать, что это программа мы бежим, что, если есть наблюдение, что имеет допуск как 5.5? Будет ли на выходе выводиться синтаксическая ошибка?

Спасибо!

JessX

ответ

0

При использовании if-then-else нет синтаксических ошибок вызвана неспособность вписаться в какой-либо конкретной, если/другое заявление; он просто ничего не делает. Поэтому в вашем случае tolerance будет иметь свое первоначальное значение, если оно имеет значение 5.5. Это будет обычно делается в тех случаях, когда вы хотите цензурировать крайние значения, если вы будете использовать специальный обычно не хватает (если вы хотите, чтобы эти крайние значения исключены из анализа):

data work.stress; 
    infile tests; 
    input ID Name $ Tolerance; 
    if tolerance <= 5 then tolerance = .L; 
    else if tolerance >= 6 then tolerance = .H; 
run; 

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

Если вы используете select-when, вам необходимо учесть все возможные значения - если вы не имеют otherwise, он не сработает при любом значении, не охватываемом when. Это часть того, почему полезно использовать select-when.

0

Ошибка будет, но не по причине, которую вы упомянули. Если вы попытаетесь заменить номер на строку, SAS не разрешит ее.

два возможных пути:

  1. Объявляет формат, используя proc format где вы указываете свои пороги. Значения, попадающие между трещинами ваших порогов, будут отображаться только как они (числовые).
  2. Создайте новую переменную.

В этом примере, независимо падает между 5 и 6 будет иметь отсутствующее значение для новой переменной tolerance, если не добавить категорию «MID»:

data work.stress; 
    infile tests(rename=(Tolerance=Tol_num)); 
    input ID Name $ Tolerance; 
    format tolerance $8.; 
    if tol_num = . then tolerance = "?"; 
    else if tol_num <= 5 then tolerance = "LOW"; 
    else if tol_num >= 6 then tolerance = "HIGH"; 
    else tolerance = "MID"; 
    drop tol_num; 
run; 
Смежные вопросы