SAS中文论坛

标题: a question about %put() [打印本页]

作者: shiyiming    时间: 2012-7-3 22:17
标题: 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.
作者: shiyiming    时间: 2012-7-4 00:52
标题: 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]
作者: shiyiming    时间: 2012-7-4 21:55
标题: Re: a question about %put()
thx a lot.
作者: shiyiming    时间: 2012-7-6 14:40
标题: 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]
作者: shiyiming    时间: 2012-7-12 03:43
标题: Re: a question about %put()
nice, byes.
作者: shiyiming    时间: 2012-7-12 09:51
标题: 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韩式是用字符型输入格式读取,结果为字符型数据。




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2