Добавление таблиц с одинаковыми переменными, но отличающимися атрибутами - PullRequest
0 голосов
/ 24 января 2019

Мой вопрос касается добавления двух разных таблиц, которые должны иметь одинаковые переменные name / format / type / length.

Я пытаюсь создать шаг в моей программе SAS, где я не разрешаю выполнение моей программы, если формат / тип / длина переменных с одинаковым именем не совпадают.Например, когда в одной таблице у меня есть дата в строке типа «дд-мм-гггг», а в другой таблице у меня есть «гггг-мм-дд» или «дд-мм-гггг чч: мм: сс».После добавления наши ежедневные выполнения, основанные на этих таблицах ввода, не работали, как ожидалось.Иногда значения появляются как отсутствующие или не в порядке, так как форматы разные.

Я попытался использовать инструкцию PROC COMPARE, что позволило мне проверить, какие переменные имеют различные атрибуты (тип, длина, формат, InFormat).и метки).

proc compare base = SAS-data-set
             compare = SAS-data-set;
run;

Однако я только получил информацию о том, какие переменные имеют разные атрибуты (список общих переменных с разными атрибутами), и не смог ничего с этим сделать / с этим.

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

Снимок экрана с примером:

Screenshot of an example

1 Ответ

0 голосов
/ 25 января 2019

Вы можете использовать Proc CONTENTS, чтобы получить информацию о переменных наборов данных.Сделайте это для обоих наборов данных, и затем вы можете использовать Proc COMPARE для создания набора данных, информирующего вас о различиях атрибутов переменных.

data cars1;
  set sashelp.cars (obs=10);
  date = today ();
  format date date9.;
  cars1_only = 1;
  x = 1.458; label x = "x-factor";
run;

data cars2;
  length type $50;
  set sashelp.cars (obs=10);
  format date yymmdd10.;
  cars2_only = 1;
  X = 1.548; label x = "X factor to apply";
run;

proc contents noprint data=cars1 out=cars1_contents;
proc contents noprint data=cars2 out=cars2_contents;
run;

data cars1_contents;
  set cars1_contents;
  upName = upcase(Name);
run;
data cars2_contents;
  set cars2_contents;
  upName = upcase(Name);
run;

proc sort data=cars1_contents; by upName;
proc sort data=cars2_contents; by upName;
run;



proc compare noprint 
  base=cars1_contents 
  compare=cars2_contents 
  outall 
  out=cars_contents_compare (where=(_TYPE_ ne 'PERCENT'))
;

  by upName;
run;

Существует также таблица ODS, которую вы можете записать напрямую, без необходимостизапустите Proc CONTENTS, но перехват данных не является 'data-rific'

ods output CompareVariables=work.cars_vars;

proc compare base=cars1 compare=cars2;
run;
...