请选择 进入手机版 | 继续访问电脑版
楼主: jigouhuan
2028 3

[有偿编程] sas proc sql 放进Macro中取不出数据 [推广有奖]

  • 0关注
  • 0粉丝

高中生

55%

还不是VIP/贵宾

-

威望
0
论坛币
3473 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
181 点
帖子
14
精华
0
在线时间
32 小时
注册时间
2015-1-31
最后登录
2021-3-19

jigouhuan 发表于 2017-9-26 18:54:02 |显示全部楼层 |坛友微信交流群
100论坛币
%Macro Form;

%Do i=1 %to 3;
data date;set date;
if _N_ = &i then call symput('month',month1);
run;

%put &month;

proc sql;
create table temp0 as
   select a.InstrumentID, a.Tradedate, b.ServerTime, b.LastPrice, b.Volume, b.Openinterest, b.Bidprice1, b.BidVolume1, b.AskVolume1
      from dominant AS a inner join future.ag&month AS b
          on a.tradedate=b.tradedate and a.InstrumentID=b.InstrumentID;
          quit;
%end;

%Mend Form;%Form;

代码如上 想从很多个ag的数据集中取出与dominant数据集中同一天且交易代码相同的数据 已有一个date数据集 将proc sql statement在宏外运行没有问题 能够取出数据 但是放入宏中却显示数据集是0行9列

想问大家应该如何解决

最佳答案

baiyaoqian 查看完整内容

匹配 FUTURE.AG1209 这个表好像导成功了啊, 是不是FUTURE.AG1210 的字段值匹配有问题呢?你看看FUTURE.AG1210 这个表。 为什么你create table 创建的是同一个表名呢?这样每次都会覆盖之前的结果吧?
关键词:proc sql Macro ROC CRO acr sas proc sql macro
baiyaoqian 发表于 2017-9-26 18:54:03 |显示全部楼层 |坛友微信交流群
jigouhuan 发表于 2017-9-27 16:23
136  %Macro Form;
137
138  %Do i=1 %to 3;
匹配 FUTURE.AG1209
这个表好像导成功了啊,
是不是FUTURE.AG1210 的字段值匹配有问题呢?你看看FUTURE.AG1210 这个表。

为什么你create table 创建的是同一个表名呢?这样每次都会覆盖之前的结果吧?

使用道具

baiyaoqian 发表于 2017-9-27 10:07:08 |显示全部楼层 |坛友微信交流群
可以用options mlogic mprint;
看一下报错内容吗?
或者
call symput('month',month1);
更改为call symput('month',compress(month1));
试试呢?

使用道具

jigouhuan 发表于 2017-9-27 16:23:40 |显示全部楼层 |坛友微信交流群
baiyaoqian 发表于 2017-9-27 10:07
可以用options mlogic mprint;
看一下报错内容吗?
或者
136  %Macro Form;
137
138  %Do i=1 %to 3;
139  data date;set date;
140  if _N_ = &i then call symput('month',month1);
141  run;
142
143  %put &month;
144
145  proc sql;
146  create table temp0 as
147     select a.InstrumentID, a.Tradedate, b.ServerTime, b.LastPrice, b.Volume, b.Openinterest, b.Bidprice1,
147! b.BidVolume1, b.AskVolume1
148        from dominant AS a inner join future.ag&month AS b
149        on a.tradedate=b.tradedate and a.InstrumentID=b.InstrumentID;
150        quit;
151  %end;
152
153  %Mend Form;%Form;
MPRINT(FORM):  data date;
MPRINT(FORM):  set date;
MPRINT(FORM):   if _N_ = 1 then call symput('month',month1);
MPRINT(FORM):   run;

NOTE: 从数据集 WORK.DATE. 读取了 45 个观测
NOTE: 数据集 WORK.DATE 有 45 个观测和 5 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.00 秒
      CPU 时间          0.01 秒


1209
MPRINT(FORM):   proc sql;
MPRINT(FORM):   create table temp0 as select a.InstrumentID, a.Tradedate, b.ServerTime, b.LastPrice, b.Volume,
b.Openinterest, b.Bidprice1, b.BidVolume1, b.AskVolume1 from dominant AS a inner join future.ag1209 AS b on
a.tradedate=b.tradedate and a.InstrumentID=b.InstrumentID;
NOTE: 数据文件“FUTURE.AG1209.DATA”的格式是另一个主机的本地格式,或文件编码与会话编码不匹配。因此,系统将使用“跨
      环境数据访问”。这可能需要额外的 CPU 资源,并可能降低性能。
NOTE: 表 WORK.TEMP0 创建完成,有 1186814 行,9 列。

MPRINT(FORM):   quit;
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间          1.85 秒
      CPU 时间          1.87 秒


MPRINT(FORM):   data date;
MPRINT(FORM):  set date;
MPRINT(FORM):   if _N_ = 2 then call symput('month',month1);
MPRINT(FORM):   run;

NOTE: 从数据集 WORK.DATE. 读取了 45 个观测
NOTE: 数据集 WORK.DATE 有 45 个观测和 5 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.00 秒


1210
MPRINT(FORM):   proc sql;
MPRINT(FORM):   create table temp0 as select a.InstrumentID, a.Tradedate, b.ServerTime, b.LastPrice, b.Volume,
b.Openinterest, b.Bidprice1, b.BidVolume1, b.AskVolume1 from dominant AS a inner join future.ag1210 AS b on
a.tradedate=b.tradedate and a.InstrumentID=b.InstrumentID;
NOTE: 数据文件“FUTURE.AG1210.DATA”的格式是另一个主机的本地格式,或文件编码与会话编码不匹配。因此,系统将使用“跨
      环境数据访问”。这可能需要额外的 CPU 资源,并可能降低性能。
NOTE: 表 WORK.TEMP0 创建完成,有 0 行,9 列。

由于数据比较长 就截取了i=1的段落 不存在报错哎 就是取不出数据 看上去像是proc sql没有运行

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-16 16:30