2014-09-24 3 views
0

Я импортирую DBF-файл в SAS, который содержит несколько столбцов даты. Я хочу сделать некоторые проверки на некоторых из этих колонн, таких как:SAS Дата выпуска с импортированным DBF-файлом

  • 1) DATA_NASC является> 01.01.1900
  • 2) DATA_NASC является < сегодня()
  • 3) DATA_INI_V является> DATA_FIM_V

В моем файле DBF столбцы даты отформатированы как «dd/mm/yyyy» (бразильский стандартный формат). Например, у меня в первом ряду:

  • DATA_NASC = 16/06/1940
  • DATA_INI_V = 01/04/1995
  • DATA_FIM_V = 01/04/2005

Ниже приведен фрагмент импорта DBF.

Идея заключается в создании правил проверки (макроса для каждого правила) для проверки дат.

data inputs; 
    call symput('campo1', "DATA_INI_V"); 
    call symput('campo2', "DATA_FIM_V"; 
    call symput('sistema2', "PVR_SUPERVIDA"); 
    call symput('hoje', %sysfunc(today(),ddmmyy10.)); 
run; 

filename inf "/folders/myfolders/BVP Data Quality/PVR_SUPERVIDA_201408.DBF"; 
proc dbf db4=inf out=test; 

Теперь я хотел бы сделать несколько простых SELECT COUNT (*), чтобы подсчитать общее число регистров и число недействительных регистров. Что-то вроде:

proc sql print; 
    SELECT COUNT(*) from test where &campo1 < '01/01/1900'; 
    SELECT COUNT(*) from test where &campo1 < '01/01/1900' and &campo1 > TODAY(); 
    SELECT COUNT(*) from test where &campo1 > &campo2; 
run; 

Как мои даты столбцов в файле DBF считываются как текст в SAS, я не могу управлять, чтобы сравнить значения даты.

Любые предложения?

Спасибо.

+0

Можете ли вы опубликовать процедурный содержимое результат на импортируемые набора данных? – Reeza

ответ

0

После прочтения в вашем файле DBF, почему бы не преобразовать дату (формат символа) в фактический формат даты, чтобы вы могли сравнить ее.

например:

realdate = input(mytextdatefield,date9.); 
+0

Привет, не могли бы вы объяснить это немного дальше? какой STEP я должен сделать? на этапе данных? И каков результат? –

+0

@ BrunoCamiña хорошо после того, как вы импортировали свой файл dbf (я предполагаю, что через Proc Import?) Создайте еще один datestep для преобразования дат, например 'data want; установить importdate; convertDATA_NASC = ввод (DATA_NASC, дата9.); convertDATA_INI_V = ввод (DATA_INI_V, date9.); convertDATA_FIM_V = ввод (DATA_FIM_V, дата9.); run; ' – jaymarvels

+0

Вот что я делаю: filename inf & arq_in; proc dbf db4 = inf out = test; данные test2; set = test; преобразованныйDATA_NASC = ввод (& campo2, ddmmyy10.); run; proc sql print; выберите convertDATA_NASC из test2; выберите DATA_NASC из теста; quit; И вот что я получаю как результат: преобразованныйDATA_NASC . DATA_NASC 16/01/1847 16/06/1940 02/01/1956 03/12/1941 ... Я не могу понять, что я делаю неправильно. Не могли бы вы помочь мне? :( –