Sas 带有proc append的宏中的日期格式

Sas 带有proc append的宏中的日期格式,sas,Sas,我需要用另一个数据集的每次修改的寄存器更新一个数据集。 我的意思是,使用proc append,sas必须向现有数据集(寄存器)添加一个观测值(temp),该数据集将包含今天的日期和另一个数据集的一些值(值) temp示例 date VAL1 VAL2 2015-03-11 10 9 完成时登记册的除名: date VAL1 VAL2 2015-01-01 12 23 2015-01-02 22 14 2015-03-

我需要用另一个数据集的每次修改的寄存器更新一个数据集。 我的意思是,使用proc append,sas必须向现有数据集(寄存器)添加一个观测值(temp),该数据集将包含今天的日期和另一个数据集的一些值(值)

temp示例

date        VAL1    VAL2
2015-03-11  10      9
完成时登记册的除名:

date        VAL1    VAL2
2015-01-01  12      23
2015-01-02  22      14
2015-03-11  10      9
我的尝试:

%macro mymacro;
data temp (keep DATE VAL1 VAL2);
set values;
date= datetime();
run;
proc append base=register data=temp; run;
%mend;

data register;
length var1 8. var2 8. date 8. ;
format date yymmdd.;
run;

%mymacro;
我的日期格式有问题,你能帮我吗? 这让我快发疯了。 我必须为寄存器的变量或临时变量定义一些长度吗

结果是var date中的一个数字,我希望是一个日期,显然

使用今天()而不是日期时间()

另外,为了保持示例中显示的iso格式,请使用

IS8601DA10.

首先,SAS既有日期也有日期时间。两者都用数字表示,变量都是数字。提交以下代码,您将看到2015年3月11日等于20158,即自1960年1月1日起的天数。今天的datetime等于我运行它时的1741677677;这是自1960年1月1日开始的秒数

data _null_;
  d=date();
  dt=datetime();
  put d=;
  put dt=;
run;
在SAS中,您可以用适当的格式表示这些数字。将日期格式(如
date9.
应用于日期)告知SAS打印与数字对应的日期。datetime值也是这样:

data _null_;
  d=date();
  dt=datetime();
  put d= date9.;
  put dt= datetime.;
run;

在您的情况下,似乎希望使用
date()
函数返回日期,而不是日期时间。

您可能正在查找
date()
today()
而不是返回当前日期时间而不是当前日期的
datetime()

不必预先创建空的
寄存器
数据集,因为
proc append
将为您完成此操作

然后,您可以将format语句添加到
temp
数据步骤中,并执行以下操作:

data temp (keep date val1 val2);
    format date yymmdd10.;
    set values;
    date = today();
run;

非常感谢,问题是我用的是datetime()而不是today()。非常感谢,问题是我用的是datetime()而不是today()。非常感谢,问题是我用的是datetime()而不是today()。
data _null_;
  d=date();
  dt=datetime();
  put d= date9.;
  put dt= datetime.;
run;
data temp (keep date val1 val2);
    format date yymmdd10.;
    set values;
    date = today();
run;