Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SAS中比较日期(Date1=Date2)_Date_Sas - Fatal编程技术网

在SAS中比较日期(Date1=Date2)

在SAS中比较日期(Date1=Date2),date,sas,Date,Sas,我想比较SAS数据集中的两个日期,即does date1=date2。我试图使用ifn和ifc函数来实现这一点,但怀疑它们工作不正常。我直接从sugi中获取了这段代码,但是使用这些函数成功地比较了字符/数字变量。我还成功地尝试了使用proc-sql进行比较,但我想在数据步骤中学习如何进行比较 我的代码如下: data not_in_HDD_3; set not_in_HDD_2; start=STMT_PERIOD_FROM; if start=. then start=ADMI

我想比较SAS数据集中的两个日期,即does date1=date2。我试图使用ifn和ifc函数来实现这一点,但怀疑它们工作不正常。我直接从sugi中获取了这段代码,但是使用这些函数成功地比较了字符/数字变量。我还成功地尝试了使用proc-sql进行比较,但我想在数据步骤中学习如何进行比较

我的代码如下:

 data not_in_HDD_3; 
 set not_in_HDD_2; 
  start=STMT_PERIOD_FROM;
  if start=. then start=ADMIT_START_OF_CARE;  
  start_2=input(start, ANYDTDTE8.); 
     format start_2 MMDDYY10.; 
       drop start; 
  rename start_2=start; 
  dob=input(birth_date, ANYDTDTE8.);
      format dob MMDDYY10.; 
 Birth_record = ifn (start eq dob, 0 , 1);
 ifc_result = ifc(start=dob,"True","False","Missing");
 ifn_result = ifn(start=dob,1,0,.);
 ifn_result_fmt = put(ifn_result,ifn_label.);
 fuzz_result = ifc(fuzz(start-dob),"True","False","Missing");
 drop ifn_result;
 run; 


 proc sql;
 create table not_in_HDD_4 as
    select *,
       case
   when (start=dob) then "True"
   else "False"
    end as sql_case_var length=8
   from not_in_HDD_3;
  quit;

任何洞察都将不胜感激

SAS日期只是相对于1960年1月1日(即第0天)的数字。您可以使用任何标准类型的比较来比较它们。这里有一些方法可以做到这一点

data want;
    set have;
    dob = input(birth_date, anydtdte8.);

    /* 1 and 0 indicator if they are equal/not equal */
    result1 = (start = dob);

    /* 1, 0, missing indicator: we are exploiting the fact
       that adding a missing value produces a missing value.
       Note that this is not the case with the sum() function */
    if(start + dob = .) then call missing(result2);
        else if(start = dob) then result2 = 1;
            else result2 = 0;

    /* select function */
    select;
         when(start = dob) result3 = 1;
         when(start + dob = .) result3 = .;
         otherwise result3 = 0;
    end;
run;

这与您的问题无关,但您可以使用
coalesce
函数稍微清理代码,返回第一个非缺失值<代码>开始=合并(STMT\u期间\u开始,接受\u开始\u护理)。另外,我认为你的条件句没有任何问题。可以将数据集的一部分添加到您的问题中吗?谢谢!不幸的是,我无法添加此数据,它是敏感的:(你能添加日期/if_结果吗?嘿@J_Lard我创建的格式化日期变量有点奇怪。我使用了你与我的未格式化变量和ifn函数的联合,它工作起来很有魅力。SAS日期总是吸引我!制作看起来像真实数据的假数据。感谢Stu提供的详细信息!我尝试了你的方法a。)nd在我格式化的日期变量上并没有成功。然而,当我用你们的方法处理一个原始变量和一个我创建的变量时(start=birth\u date),它成功了。我想知道日期变量的格式是否有问题???是的,有def。日期的格式有点奇怪。这非常有效-数据不在HDD中;设置不在中_HDD 2;开始=合并(STMT_PERIOD_FROM,ADMIT_start_OF_CARE);出生日期;出生记录=ifn(开始等式dob,0,1);ifc_result=ifc(开始=dob,“True”,“False”,“Missing”);ifn_result=ifn(开始=dob,1,0,);ifn_result\u fmt=put(ifn_result,ifn_标签);fuzz_result=ifc(开始等式dob),“True”,“False”,“Missing”;drop ifn_result;run;