SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1873|回复: 10
打印 上一主题 下一主题

宏变两引用有问题,请指教。

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-5-18 15:14:27 | 只看该作者

宏变两引用有问题,请指教。

我的程序如下,想把SAS数据导入EXCEL工作表。每个SAS数据库有一个数据。

options mlogic;
%macro sas2xl;
%do i=1 %to 9;
    %do m=1 %to 6;
    filename recrange dde 'excel|[jjg.xls]sheet1!r&i.c&m:r&i.c&m' notab;
    data _null_;
    set occu.expnum600&i&m;
    file recrange;
    put expnum;
    run;
    filename recrange clear;
    %end;
%end;
%mend;
%sas2xl

可是有如下提示。


NOTE: The file RECRANGE is:
      DDE Session,
      SESSION=excel|[jjg.xls]sheet1!r&i.c&m:r&i.c&m,
      RECFM=V,LRECL=256
宏变量没有替换。请指教。多谢。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-5-18 16:57:09 | 只看该作者

Re: 宏变两引用有问题,请指教。

[quote="garyjjg":8f15f]
    filename recrange dde 'excel|[jjg.xls]sheet1!r&i.c&m:r&i.c&m' notab;
[/quote:8f15f]

的单引号改成双引号就可以啦,嘿嘿~~~~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2004-5-18 18:49:41 | 只看该作者

还是不行。

我换成双引号还是不行。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2004-5-18 18:50:59 | 只看该作者
提示如下
filename recrange dde
1   ! ''excel|[jjg.xls]sheet1!r&i.c&m:r&i.c&m'' notab;     data _null_;     set
        -----
        23
ERROR 23-2: Invalid option name excel.

1   ! ''excel|[jjg.xls]sheet1!r&i.c&m:r&i.c&m'' notab;     data _null_;     set
                       ------
                       23
SYMBOLGEN:  Macro variable I resolves to 1
SYMBOLGEN:  Macro variable M resolves to 1
SYMBOLGEN:  Macro variable I resolves to 1
SYMBOLGEN:  Macro variable M resolves to 1
ERROR 23-2: Invalid option name sheet1.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2004-5-18 19:39:14 | 只看该作者
在&M后面加.变成&M.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2004-5-25 21:11:52 | 只看该作者
可是都不行啊。是不是在DDE中不能用宏变量。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2004-5-25 23:40:36 | 只看该作者
I suggest you to turn on MPRINT options and see what kind of code has been generated by solving the macro variables.  I think it is possible that the solved macro variables contain space after the number, so the column name became inappropriate.  Just take an example, r1c1:r2c2 is not same as r1 c1 :r2 c2 .
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2004-5-26 16:08:03 | 只看该作者
the following is the reminder in the log:



filename recrange dde ''excel|[jjg.xls]sheet1!r&i.c1:r&i.c1'' notab;
                              -----
                              23
ERROR 23-2: Invalid option name excel.

1  !  filename recrange dde ''excel|[jjg.xls]sheet1!r&i.c1:r&i.c1'' notab;
                                             ------
                                             23
MPRINT(SAS2XL):   filename recrange dde ''excel|[jjg.xls]sheet1!r1c1:r1c1'' notab;
ERROR: Error in the FILENAME statement.

ERROR 23-2: Invalid option name excel

ERROR 23-2: Invalid option name sheet1.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2004-5-27 09:04:18 | 只看该作者
I tested the following program without any problem.  I am running SAS 8.1 in Winodw XP, and MS Office for XP.  Be attention, to run the program, you have to open Excel worksheet and let it run on background.

data a;                                                                                                                                 
abc=123;                                                                                                                                
run;                                                                                                                                    
                                                                                                                                       
options mlogic mprint macrogen;                                                                                                         
%macro sas2xl;                                                                                                                          
%do i=1 %to 9;                                                                                                                          
%do m=1 %to 6;                                                                                                                          
filename recrange dde "excel|[sales.xls]sheet1!r&i.c&m:r&i.c&m" notab;                                                                  
data _null_;                                                                                                                           
set a;                                                                                                                                 
file recrange;                                                                                                                          
put abc;                                                                                                                                
run;                                                                                                                                    
filename recrange clear;                                                                                                               
%end;                                                                                                                                   
%end;                                                                                                                                   
%mend;                                                                                                                                 
%sas2xl
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2004-5-27 09:14:06 | 只看该作者
Besides, your program is not a good way to accomplish your goal.  A better way is to form a SAS data set or array with 9 rows and 6 columns, and write it to a spreadsheet at the end.  You need to access the spreadsheet only once, not 54 times.  With this SAS data set, if you can not make DDE access work, you can simply go to file/export data to save it into an Excel work sheet.
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-1-10 19:35 , Processed in 0.267311 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表