在SAS电子指南中格式化¯o变量日期

时间:2016-06-23 17:43:59

标签: date sas enterprise-guide

以下代码的要点是将上周星期日的日期和上周星期六的日期分配给宏变量。我需要 date9。格式。

在第48行的数据步骤中,我将它们格式化为 date9。,但是在数据步骤之外调用它们时会丢失格式。它们只是显示为默认的SAS日期格式。

我在这里缺少什么?

44         data _null_;
45             curDate= today();
46             sunday = intnx('week1.1',curDate,-1,'Begin');
47             saturday = intnx('week1.1',curDate,-1,'End');
48             format _all_ date9.;
49             put (_all_)(=/);
50          call symput('sunday',sunday);
51          call symput('saturday',saturday);
52          
53         run;

NOTE: Numeric values have been converted to character values at the places given     by: (Line):(Column).
      50:23   51:25   

curDate=23JUN2016
sunday=12JUN2016
saturday=18JUN2016
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds


54          %PUT &sunday;
20617

3 个答案:

答案 0 :(得分:1)

您可以使用PUT直接应用格式。您可能会发现在将来的查询中使用实际日期值更容易,如果您正在使用date9格式化,请确保在解析变量后引用并使用d。

我还建议改用呼叫symputX。

call symputx('sunday',put(sunday, date9.));

答案 1 :(得分:1)

这是一种常见的情况,可能会变得很烦人......我编写了一个宏例程,允许使用我们选择的sas格式将格式化(或未格式化)的日期分配给宏变量。

使用%letdate宏,您只需这样做:

%letdate(sunday, intnx('week1.1',today(),-1,'Begin'), date9.)
%letdate(saturday, intnx('week1.1',today(),-1,'End'), date9.)

日志显示:

*** Variable macro sunday = 12JUN2016 *** 
*** Variable macro saturday = 18JUN2016 ***

source code for the macro can be found here;它用法语记录,但应该足够直截了当。请注意:

  1. 参数1是宏变量的名称
  2. 参数2是值(正如您在数据步骤中所写的那样)
  3. 参数3是您要应用于参数2的值的sas格式。

答案 2 :(得分:0)

Reeza的答案(不同的代码)的替代方案,你可以在%sysfunc中包装put函数,以你想要的格式输出你的宏日期变量;

%put %sysfunc(PutN(&sunday, date9));

Results