在sas中格式化日期变量时出错

时间:2015-01-01 11:48:17

标签: format sas

当我尝试为日期变量执行格式化时出现错误。

这就是我的日期变量值看起来像" 26-Dec-58 "

" 未找到或无法加载格式$ DATE "

错误的原因是我的日期值存储为数据集中的char变量,因此在格式化变量时它不接受数字变量的格式。

所以我想将我的日期(这是一个字符)变量转换为数字变量而不引入新变量。

我尝试了 datepart substring 选项,但仍然收到错误。

我仍处于sas的学习阶段,所以任何清除错误的代码都表示赞赏我知道这个概念,但编码我尝试了所有我知道但仍然没有运气。

当前代码:

data Practice.Sales; 
    set Practice.Sales; 
    Birthdate = '26-Dec-58'; 
    Purchase_Dt = '15-Sep-04'; 
    t_num_date = input(Birthdate, ddmmyy8.); 
    t_num_date1 = input(Purchase_Dt, ddmmyy8.); 
    drop Birthdate Purchase_Dt; 
    format Birth_date ddmmyy8. PurchaseDt ddmmyy8. Price DOLLAR10.2; 
    rename t_num_date = Birthdate; 
    rename t_num_date1 = Purchase_Dt; 
run;

4 个答案:

答案 0 :(得分:0)

无法将SAS数据集中的现有变量直接从字符更改为数字。但是,您可以创建一个新的数字变量,删除原始字符变量,然后重命名新的变量:

data example;
    mydate = '26-Dec-58';
    t_num_date  = input(mydate, date9.);
    drop mydate;
    format t_num_date date9.;
    rename t_num_date = mydate;
    output;
run;

N.B。您必须在重命名之前将格式应用于临时变量。重命名后尝试应用数字格式会导致错误,因为格式语句在其余数据步骤运行之前处理,此时原始字符变量尚未被删除。

答案 1 :(得分:0)

这段代码对我来说很好,但是最后创建的变量仍然是最后一个如何改变

  data Practice.Sales;
  set Practice.Sales;
    Birth_date=datepart(input(Birthdate,anydtdtm19.));
    PurchaseDt = datepart(input(Purchase_Dt,anydtdtm19.));
        format Birth_date PurchaseDt ddmmyy8. Price DOLLAR10.2;
        drop Birthdate Purchase_Dt;
    run;

答案 2 :(得分:0)

您需要在set语句中使用重命名,然后在结尾处删除它们。

 data Practice.Sales;
  set Practice.Sales 
   *rename old variables;
  (rename=(birthdate=birth_date purchase_dt=purchasedt));

  *use renamed variables in code;
  Birthdate=datepart(input(Birth_date,anydtdtm19.));
  Purchase_Dt = datepart(input(PurchaseDt,anydtdtm19.));

  format Birthdate Purchase_Dt date9. Price DOLLAR10.2;

  drop Birth_date PurchaseDt;
run;

答案 3 :(得分:0)

SAS数据集中的变量按创建顺序显示。 如果您真的想自己确定变量的顺序,那么您应该在set语句之前创建它们。此外,我认为您不希望更改变量的名称,同时仍然更改其类型。因此,我们必须在阅读时重命名现有变量。

  data Practice.Sales;
    format Birthdate Purchase_Dt ddmmyy8. Price DOLLAR10.2;

    set Practice.Sales (rename =(Birthdate=oldBirth Purchase_Dt = oldPurchase));

    Birthdate=datepart(input(oldBirth,anydtdtm19.));
    Purchase_Dt = datepart(input(oldPurchase,anydtdtm19.));

    drop Birthdate Purchase_Dt;
  run;