【问题标题】:SAS change date formatSAS 更改日期格式
【发布时间】:2017-12-29 12:08:57
【问题描述】:

我想定义一个采用以下格式的日期格式:12JAN2010

我尝试使用此代码:

    /* partie B question 2*/
    data projet.Ophtalmo_new;
    set projet.Ophtalmo_new (RENAME=(date_diagnostic=date_dia)) (RENAME=
(date_examen=date_exa));
    date_diagnostic = input (date_dia, DDMMYY10.);
    date_examen = input (date_exa, DDMMYY10.);
    format date_diagnostic date_examen date9.;
    run;

但它向我发送了以下语法错误:

ERROR 22-322: Syntax error, expecting one of the following: un nom, une chaîne 
entre guillemets, ;,
          CUROBS, END, INDSNAME, KEY, KEYRESET, KEYS, NOBS, OPEN, POINT, 
_DATA_, _LAST_, _NULL_.

我还是一个sas初学者,我无法让它正常工作,希望你能帮忙,谢谢。

【问题讨论】:

    标签: date sas format


    【解决方案1】:

    数据集选项的语法是一个单括号表达式。 rename 选项适合:

    data-set-name ( ... options ... rename=(...) );
    

    RENAME 选项的语法如下:

    rename=(old-name-1=new-name-1 old-name-2=new-name-2 ...)
    

    所以正确的set 语句应该是

    set projet.Ophtalmo_new (RENAME=(date_diagnostic=date_dia date_examen=date_exa));
    

    因为你说你是初学者,所以我添加了这个部分。

    您显示的代码表明输入了最初名为date_diagnosticdate_examen 的变量。如果这些变量确实是以字符变量开头,那么就需要将输入从字符转换为 SAS 日期(它只是一个具有特殊含义的数字)。但是,如果变量已经是格式与您想要的格式不同的 SAS 日期,您只需更新变量的格式(或使用 FORMAT 语句更改格式以在 PROC 步骤中使用)

    data have;
      x = '01-jan-2017'd;
      format x ddmmyy10.;
    run;
    
    * demonstrate that the permanent format of x is ddmmyy10.;
    data _null_;
      put x=;
    run;
    
    * demonstrate temporary formatting of variable during step;
    data _null_;
      set have;
      format x date9.;  * modify the format temporarily during execution of data _null_;
      put x=;
    run;
    
    * permanently change format of variable;
    * only the dataset metadata (or header data) changes, the entire data set is NOT rewritten;
    proc datasets nolist lib=work;
      modify have;
      format x date9.;
    run;
    
    * demonstrate that the permanent format of x has changed to date9.;
    data _null_;
      set have;
      put x=;
    run;
    

    【讨论】:

      【解决方案2】:

      我认为问题在于RENAME 声明。您只能调用一次。

      改变这个:

      set projet.Ophtalmo_new (RENAME=(date_diagnostic=date_dia)) (RENAME=
      (date_examen=date_exa));
      

      到这里:

      set projet.Ophtalmo_new (RENAME=(date_diagnostic=date_dia date_examen=date_exa));
      

      【讨论】:

        【解决方案3】:

        您不能重命名日期,然后在 INPUT 语句中使用这些变量。它们已被重命名且不再存在,因此尝试在 INPUT 函数中访问 date_dia 最坏的情况会导致所有缺失值。

        您也不应该在 DATA 和 SET 语句中使用具有相同数据集名称的表示法。这意味着一旦运行此步骤,原始数据将不再存在。因此,您需要先备份几个步骤并重新创建原始数据,然后才能修复代码。一般来说,这会导致更难诊断和修复的错误,因为即使你修​​复了代码,你的原始数据也是错误的,所以你仍然认为你有错误。

        所以,变化: 1.更改数据语句中输出数据集的名称。 2. 删除重命名数据集选项。 3. 添加 DROP 语句以删除不再需要的变量。

        /* partie B question 2*/
        data projet.Ophtalmo2; 
        set projet.Ophtalmo_new; 
        
        date_diagnostic = input (date_dia, DDMMYY10.);
        date_examen = input (date_exa, DDMMYY10.);
        format date_diagnostic date_examen date9.;
        
         drop date_dia date_exa;
        run;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-01
          • 2012-05-11
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 2011-06-05
          相关资源
          最近更新 更多