Условие сброса SAS — создание водопада для моего образца

Добрый день, я хотел бы удалить эти наблюдения из моего водопада, однако в выходных данных отображается только первое наблюдение. Я хотел бы отбросить все наблюдения в SID и PID, поэтому я выбрал смешное соотношение.

Пожалуйста, порекомендуйте. Благодарю вас!

Кроме того, как мне оставить больше места в столбце наблюдения drop_condition в поле вывода. Иногда это вырезает мой текст. Спасибо!

data temp;
set mydata.ames_housing_data;
format drop_condition $30.;

if (SID in (0:10000000)) then drop_condition = '01: SID';
else if (PID in (0:10000000)) then drop_condition = '02: PID';
else if (Neighborhood) then drop_condition = '03: Neighborhood';
else if (Zoning in ('A', 'C', 'FV', 'I')) then drop_condition = '04: Non-Residential Zoning';
else drop_condition = '05: Sample Population';

run;

proc freq data=temp;
tables drop_condition;
title 'Sample Waterfall';
run; quit;

Вывод

Журнал

   1          OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
    55         
    56         data temp;
   57         set mydata.ames_housing_data;
   NOTE: Data file MYDATA.AMES_HOUSING_DATA.DATA is in a format that is        native to another host, or the file encoding does not match 
   the session encoding. Cross Environment Data Access will be used, which        might require additional CPU resources and might 
   reduce performance.
    58         format drop condition $30.;
    59         
    60         if (SID in (0:10000000)) then drop_condition = '01: SID';
    61         else if (PID in (0:10000000)) then drop_condition = '02: PID';
    62         else if (Neighborhood) then drop_condition = '03: Neighborhood';
    63         else if (Zoning in ('A', 'C', 'FV', 'I')) then drop_condition = '04: Non Residential Zoning';
    64         else drop_condition = '05: Sample Population';
    65         
    66         run;

    NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
   62:10   
    NOTE: Variable drop is uninitialized.
    NOTE: Variable condition is uninitialized.
    NOTE: There were 2930 observations read from the data set MYDATA.AMES_HOUSING_DATA.
    NOTE: The data set WORK.TEMP has 2930 observations and 85 variables.
    NOTE: DATA statement used (Total process time):
   real time           0.05 seconds
   cpu time            0.06 seconds


    67         
    68         proc freq data=temp;
    69         tables drop_condition;
    70         title 'Sample Waterfall';
    71         run;

    NOTE: There were 2930 observations read from the data set WORK.TEMP.
    NOTE: PROCEDURE FREQ used (Total process time):
   real time           0.06 seconds
   cpu time            0.06 seconds

    71       !      quit;

    72         
    73         OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
    85         

person Starbucks    schedule 02.01.2016    source источник
comment
Опубликуйте свой журнал, пожалуйста, ваш вывод не имеет смысла, учитывая предоставленный вами шаг данных. Кроме того, пожалуйста, предоставьте некоторые образцы данных для тестирования. Что касается проблемы с длиной, см. мой комментарий к вашему последнему вопросу, используйте LENGTH вместо FORMAT.   -  person Reeza    schedule 02.01.2016
comment
Спасибо, я буду использовать длину вместо формата. Я также предоставил свой журнал. Спасибо!   -  person Starbucks    schedule 02.01.2016
comment
Вам нужно исправить 3 примечания: последние 2 указывают, что ваша строка формата использует условие отбрасывания в виде двух слов, а не drop_condition. Первое примечание указывает на то, что ваше третье условие не имеет смысла — если соседство какое? Как есть, он будет оцениваться как true, если не отсутствует. Ваши условия if/then также расположены в шахматном порядке, что означает, что если первое оценивается как истинное, то остальные не проверяются. В данном случае это означает, что все ваши наблюдения удовлетворяют вашему первому условию. Как упоминалось ранее, вы можете проверить это с указанной частотой процесса.   -  person Reeza    schedule 02.01.2016
comment
Я сделал поправку на drop_condition. Для соседства я хочу удалить ВСЕ значения для этого наблюдения.   -  person Starbucks    schedule 02.01.2016
comment
Можете ли вы объяснить Соседство немного больше? Пример не помешал бы.   -  person Reeza    schedule 02.01.2016
comment
Окрестность является номинальной переменной. Примерами могут служить Blmngtn для Bloomington Heights, Blueste для Bluestem, BrDale для Briardale. Есть ли что-то конкретное, что вы хотели бы узнать?   -  person Starbucks    schedule 02.01.2016
comment
Хорошо, добавил немного информации в ответ. Однако это не решает вашу первоначальную проблему.   -  person Reeza    schedule 02.01.2016


Ответы (1)


Поскольку вы не использовали пропущенный в своем PROC FREQ, это означает, что все ваши данные попадают в ваше первое условие. Условия IF с IF/ELSE IF оцениваются по порядку и останавливаются на первом истинном условии.

Вы можете проверить распределение вашей переменной с помощью proc freq или proc mean.

proc means data=MYDATA.AMES_HOUSING_DATA min max;
var SID;
run;

РЕДАКТИРОВАТЬ: я думаю, что ваше третье условие будет работать как есть, но чтобы избежать примечания в журнале и для лучшего кода, я бы предложил использовать:

Else if not missing(neighbourhood) then...
person Reeza    schedule 02.01.2016
comment
Спасибо за предложение. Вместо того, чтобы вводить каждую переменную из моей таблицы, могу ли я попросить ее показать минимальное и максимальное значение для каждой переменной? Я все еще просматриваю ваши комментарии об ошибках в моем журнале. - person Starbucks; 02.01.2016
comment
Удалите оператор var, и он сделает это по умолчанию. - person Reeza; 02.01.2016