楼主: 按时地方
2471 6

[问答] 宏变量的使用的疑问 [推广有奖]

  • 0关注
  • 1粉丝

博士生

30%

还不是VIP/贵宾

-

威望
0
论坛币
352 个
通用积分
0
学术水平
11 点
热心指数
9 点
信用等级
6 点
经验
4299 点
帖子
190
精华
0
在线时间
270 小时
注册时间
2005-7-28
最后登录
2022-8-11

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我想把一张表中符合条件的某个观测赋予这张表中某一个观测变量的某一条,于是我写了如下程序,但是没有达到如期效果,请各位点拨点拨哇

data try;
set xunhuan para;
arch0=0;/*给变量赋初始值*/
if variable="ARCH0" then call symput('a',variable);
if _n_=78 then arch0=&a;/*78是一个例子,在实际中我用另一个宏控制*/
run;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Variable symput ARCH ABLE Then 疑问

沙发
pobel 在职认证  发表于 2012-10-15 16:51:22 |只看作者 |坛友微信交流群
if _n_=78 then arch0=resolve('&a');
和谐拯救危机

使用道具

藤椅
bobguy 发表于 2012-10-16 09:28:52 |只看作者 |坛友微信交流群
You can do it without using any macro variable ass below,



data try;
retain a ;
drop a;
set xunhuan para;
arch0=0;
if variable="ARCH0" then a=variable;
if _n_=78 then arch0=a;
run;

使用道具

板凳
按时地方 发表于 2012-10-19 20:17:22 |只看作者 |坛友微信交流群
pobel 发表于 2012-10-15 16:51
if _n_=78 then arch0=resolve('&a');
沙发的这位朋友,先谢谢您,用您的程序跑出来是这样的。

NOTE: 字符值已转换为数值,位置:(行:列)。
      13:37
WARNING: 没有解析符号引用 A。
NOTE: 无效的数值数据“&a”出现在行 13 列 37。

这是为什么呢?有没有修改的办法,谢谢

使用道具

报纸
按时地方 发表于 2012-10-19 20:18:22 |只看作者 |坛友微信交流群
bobguy 发表于 2012-10-16 09:28
You can do it without using any macro variable ass below,
您好,感谢您的回答,但是用您的方法跑出来,那个arch0=.是空值,这是为什么呢,系统也没提示出错?

使用道具

地板
pobel 在职认证  发表于 2012-10-20 07:39:08 |只看作者 |坛友微信交流群
按时地方 发表于 2012-10-19 20:17
沙发的这位朋友,先谢谢您,用您的程序跑出来是这样的。

NOTE: 字符值已转换为数值,位置:(行:列) ...
1. 你的程序中首先将arch0赋值为0,决定arch0为一个数值型。而后边又试图将字符串赋值给这个变量,这造成了 “NOTE: 字符值已转换为数值,位置:(行:列)。”
2. 至于警告“WARNING: 没有解析符号引用 A。”,我感觉应该是resolve()执行之前,call symput那一句还没有执行。

36   data try;
37    variable="ARCH0";
38    call symput('a',variable);
39    if _n_=1 then arch0=resolve('&a');
40    put arch0=;
41
42    x=4;
43    if x=5 then call symputx('b',x);
44    arch1=resolve('&b');
45    put arch1=;
46    run;

arch0=ARCH0
WARNING: Apparent symbolic reference B not resolved.
arch1=&b
NOTE: The data set WORK.TRY has 1 observations and 4 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 second


和谐拯救危机

使用道具

7
pobel 在职认证  发表于 2012-10-20 07:43:05 |只看作者 |坛友微信交流群
按时地方 发表于 2012-10-19 20:18
您好,感谢您的回答,但是用您的方法跑出来,那个arch0=.是空值,这是为什么呢,系统也没提示出错?
这是变量类型的问题,例子中arch0首先被赋值为一个数字0,因此是一个数值变量。后面的语句试图将字符串赋给arch0,会有数据类型的自动转换,“ARCH0”不能转化成数字,因此最后是空值。

需要把arch0设置为字符型:

data try;
length arch0 $20;
retain a ;
drop a;
set xunhuan para;
arch0="0";
if variable="ARCH0" then a=variable;
if _n_=78 then arch0=a;
run;
和谐拯救危机

使用道具

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

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

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

GMT+8, 2024-5-28 13:49