【发布时间】:2020-01-22 17:12:33
【问题描述】:
我有以下代码:
PROC SQL;
CREATE TABLE Hub_Category2 (
CategoryID INT NOT NULL,
CategoryName VARCHAR(15) NOT NULL,
LOAD_DATE NUM FORMAT=DATETIME22. NOT NULL,
RECORD_SOURCE VARCHAR(255) NOT NULL);
RUN;
quit;
%let "LOAD_DATE: %sysfunc(datetime(),datetime22.)";
%let RECORD_SOURCE='123';
proc sql;
CREATE VIEW VIEW_HUB_CATEGORIES AS
SELECT
CategoryID,
CategoryName,
&LOAD_DATE as LOAD_DATE,
&RECORD_SOURCE as RECORD_SOURCE
FROM LIB.CATEGORIES;
RUN;
Quit;
当我运行以下代码时
proc sql;
insert into Hub_Category2 select * from VIEW_HUB_CATEGORIES;
run;
Quit;
它给出了以下错误。
proc sql;
72 insert into Hub_Category2 select * from VIEW_HUB_CATEGORIES;
ERROR: Value 3 on the SELECT clause does not match the data type of the
corresponding column listed after the INSERT table name.
我想,我在格式化日期、插入或使用宏时犯了错误。请帮帮我
【问题讨论】:
-
您的第一个
%let语句不是有效的 SAS 代码,因为它不包含您要为其赋值的宏变量名称。你实际运行了什么代码? -
为什么要把一个固定的日期时间值放到一个视图中?您是否尝试记录创建视图的时间?如果您想在使用视图拉取数据时执行
datetime()函数,则将实际函数调用编码到视图定义中而不是常量值。