Date 导入了DBF文件的SAS日期问题

Date 导入了DBF文件的SAS日期问题,date,import,sas,dbf,Date,Import,Sas,Dbf,我正在将一个DBF文件导入SAS,其中包含几个日期列。我想对其中一些列进行一些检查,例如: 1) 数据>1900年1月1日 2) 数据是数据FIM 在我的DBF文件中,日期列的格式为“dd/mm/yyyy”(巴西标准格式)。 例如,我的第一行中有: 数据=1940年6月16日 数据=1995年4月1日 数据\u FIM\u V=01/04/2005 下面是DBF导入的一个片段 其思想是创建验证规则(每个规则都有一个宏)来检查日期 data inputs; call symput(

我正在将一个DBF文件导入SAS,其中包含几个日期列。我想对其中一些列进行一些检查,例如:

  • 1) 数据>1900年1月1日
  • 2) 数据是
  • 3) 数据INI是>数据FIM
在我的DBF文件中,日期列的格式为“dd/mm/yyyy”(巴西标准格式)。 例如,我的第一行中有:

  • 数据=1940年6月16日
  • 数据=1995年4月1日
  • 数据\u FIM\u 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;
proc-sql打印;
从测试中选择计数(*),其中&campo1<'01/01/1900';
从测试中选择计数(*),其中&campo1<'01/01/1900'和&campo1>TODAY();
从测试中选择计数(*),其中&campo1>&campo2;
跑
由于DBF文件中的“我的日期”列在SAS中被读取为文本,因此我无法比较日期的值

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;
有什么建议吗


谢谢。

读入DBF文件后,为什么不将日期(字符格式)转换为实际日期格式,以便进行比较

例如:


嗨,你能再解释一下吗?我应该做哪一步?在数据步骤中?结果如何?@BrunoCamiña在导入dbf文件后(我猜是通过Proc Import?)创建另一个日期步骤来转换日期,例如
所需的数据;设置导入日期;convertedDATA_NASC=输入(数据_NASC,日期9.);convertedDATA_INI_V=输入(数据INI_V,日期9.);转换数据=输入(数据,日期9);运行我正在做的是:filename-inf&arq\u-in;proc dbf db4=inf out=test;数据测试2;设置=测试;convertedDATA_NASC=输入(&campo2,ddmmyy10.);跑proc-sql打印;从test2中选择convertedDATA_NASC;从测试中选择数据;退出我得到的结果是:convertedDATA_NASC。资料来源:NASC 16/01/1847 16/06/1940 02/01/1956 03/12/1941。。。我不知道我做错了什么。你能帮我吗(我不知道要传递什么宏值,但这里有一个端到端的示例。我创建了一个以日期为字符(文本)的虚拟数据集),然后在下一步转换它们:
DATA fakeDBF;INPUT charDates$;dataline;16/06/1940 01/04/1995 01/04/2005;RUN;DATA convertedDates;format converted_charDates ddmmyy10;set fakeDBF;converted_charDates=INPUT(charDates,ddmmy10);run;proc sql print;select converted_charDates from convertedDates;quit;
您的代码非常适合我。但是,当我尝试使用相同的结构,但导入DBF文件而不是使用数据行写入输入时,它不起作用…我得到一个.as输出,尽管我的数据库中有500行。您能发布一个proc con吗在导入的数据集上有什么结果?