SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1304|回复: 5
打印 上一主题 下一主题

a question about %put()

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-7-3 22:17:46 | 只看该作者

a question about %put()

%macro a;
%do i=1 %to 12;
%let ii=%put(&i.,z2.);;
%put ii=&ii.;
%end;
%mend;
%a

When I run this code, a message in SAS log occurred:
ERROR: Macro keyword PUT appears as text.  A semicolon or other delimiter may be missing.

Could you help me fix that?
(PS: My purpose is to get ii=01,02,03,...,10,11,12 instead of 1,2,3,...,10,11,12)
Thanks a lot.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-7-4 00:52:39 | 只看该作者

Re: a question about %put()

[code:1ymvcwz4]%macro a;
%do i=1 %to 12;
data _null_;
ii=put(&i.,z2.);
put ii;
run;
%end;
%mend;
%a
[/code:1ymvcwz4]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2012-7-4 21:55:41 | 只看该作者

Re: a question about %put()

thx a lot.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2012-7-6 14:40:23 | 只看该作者

Re: a question about %put()

[code:t1k6snrw]%macro a;
%do i=1 %to 12;
%let ii=%sysfunc(putn(&i.,z2.));
%put ii=ⅈ
%end;
%mend;
%a
[/code:t1k6snrw]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2012-7-12 03:43:23 | 只看该作者

Re: a question about %put()

nice, byes.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2012-7-12 09:51:34 | 只看该作者

Re: a question about %put()

[code:1hwux985]%macro a;
data _null_;
%do i=1 %to 12;
ii=put(&i,z2.);
put ii=;
%end;
run;
%mend;
%a[/code:1hwux985]
产生的结果都在一起,而且完全可以不用%put语句。
那请问如何让ii的每个值产生在一个数据集中呢?用什么语句?
[code:1hwux985]%macro a;
%do i=1 %to 12;
%let ii=%sysfunc(putn(&i.,z2.));
%put ii=ⅈ
%end;
%mend;
%a
[/code:1hwux985]
INPUTN函数
  【功能】在运行的过程中指定数值型输入格式
  【类别】特殊函数
  【语法】
  Syntax
  >);
  【参数说明】
  source 源数据,必须是字符型数据
  informat.作用于源数据的输入格式
  w 输入格式的宽度
  这里指定的宽度具有较高的优先级,会覆盖掉输入格式中包含的宽度。即如果省略w,则目标变量的长度取决于informat.参数。另外,如果w比变量值长度要小,则会导致右截尾现象。
  d 输入格式的小数位
  同样,这里指定的小数位具有较高的优先级,会覆盖掉输入格式中包含的小数位。即如果省略w,则目标变量的长度取决于informat.参数。
  【示例】
  下面例子,首先根据source值通过put函数确定日期格式,将日期格式存入变量dateinformat,然后用这个格式去读取后面的日期。
[code:1hwux985]proc format;
value readdate 1='date7.'
               2='mmddyy8.';
run;
options yearcutoff=1920;
data fixdatex;
length jobdesc $ 12;
input source id iname $ jobdesc $ start $;
dateinformat=put(source,readdate.);
newdate=inputn(start,dateinformat);
datalines;
1 1604 Ziminski writer 09aug90
1 2010 Clavell editor 26jan95
2 1833 Rivera writer 10/25/92
2 2222 Barnes proofreader 3/26/98
;
run;[/code:1hwux985]
  【扩展】
  1. inputn函数与input函数的区别(这里的比较类似于前面的inputc函数)
  ①input函数可以将字符型变量转换为字符型或数值型,这取决于指定的输入格式informat;而inputn函数只能将字符型变量转换为数值型。从这个角度上看,跟inputc函数一样,可以将inputn函数的功能理解为input函数功能的子集。
  ②inputn函数可以动态的指定输入格式,而input函数则不可以。上面的示例中,如果将inputn函数换为input函数,则SAS不会解析dateinformat变量,而是将其当作输入格式,所以提示有语法错误。而inputn函数,则可以接受这种存储在变量中的输入格式。
  ③inputn函数可以在宏函数%sysfunc()中使用,而input函数不可以。
  ④inputn函数的输入格式informat需要用引号引起来,而input函数则不需要。
  2. inputn函数与inputc函数的比较
  inputn函数与inputc函数都是读取字符型数值,inputn函数是用数值型输入格式读取,结果为数值型数据;inputc韩式是用字符型输入格式读取,结果为字符型数据。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-6 13:27 , Processed in 0.071148 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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