【发布时间】:2019-11-14 22:37:10
【问题描述】:
我有三个由三个不同的宏创建的数据集/表:一个用于数字字段,一个用于分类字段,一个用于日期字段。当我调用宏时,我会这样做
%pnum(databasename, tablename, variablename)
%pcat(databasename, tablename, variablename)
%pdate(databasename, tablename, variablename)
第一个表(table1)看起来像:
databasename | tablename| variablename| mean| N| missing | stddev
第二个表(table2)看起来像:
databasename | tablename| variablename| S | N| missing| stddev| completeness
第三张表(table3)长这样:
databasename | tablename| variablename| minimum date| maximum date| mean
我想创建一个表(最终表),其中包含来自前三个宏的数据值:
databasename | tablename| variablename| mean| N| missing | stddev |S| completeness
我尝试创建一个libname results 来存储结果并使用proc sql 创建一个新表:
proc sql;
create table result.final as
select t1.*
,t2.S
,t2.compleness
,t3.minimum_date
,t3.maximum_date
from table1 t1
left join table2 t2
on t1.date=t2.date
left join table3 t3
on t1.date=t2.date;
quit;
其中date 是所有表共有的(是表分组字段)。
但是,但这在我运行宏时不起作用:例如,我运行 pnum 并收到错误消息
table final 不存在
。
错误是由于这部分代码:
proc sql;
insert into results.final;
t1.*
from table1 t1;
quit;
可能我正在尝试将列及其值插入尚未创建的数据集中。
然后我的问题是:如何使用该 libname 创建一个新数据集,该数据集从这些宏创建的表中收集和存储所有值,如最终表所示?最后我想做的是将这段代码创建到一个新的宏中。
我希望你能帮助我。谢谢
【问题讨论】:
-
您是否需要覆盖一行,例如在以后重新测量特定数据库/表/变量时?此外,问题中的第一个 sql 代码确实与表描述匹配——这三个部分未显示为具有数据列,并且左连接 t3 不正确(在 t1.date=t2.date 上)
-
当该变量不在任何来源中时,您为什么要尝试在 DATE 加入?您需要合并数据还是只是堆叠观察结果?如果您需要合并它们,那么您想使用哪个公共变量(MEAN、STDDEV)的来源?还是您想重命名这些变量,使它们成为不同的变量?