SAS宏将整数转换为十六进制字符串

SAS宏将整数转换为十六进制字符串,sas,Sas,假设我有以下宏变量赋值: %let x=42165; 如何获得相应的十六进制字符串表示形式?也就是说,如何转换&x并将其存储到&y中,以便 %put y=&y; 写 y=A4B5 ?像这样: %let y=%sysfunc(putn(&x.,hex4.)); [我认为没有%put()宏函数来避免与%put宏语句混淆。]如下: %let y=%sysfunc(putn(&x.,hex4.)); [我认为没有%put()宏函数来避免与%put宏语句混淆。]如果要存储

假设我有以下宏变量赋值:

%let x=42165;
如何获得相应的十六进制字符串表示形式?也就是说,如何转换
&x
并将其存储到
&y
中,以便

%put y=&y;

y=A4B5

像这样:

%let y=%sysfunc(putn(&x.,hex4.));
[我认为没有
%put()
宏函数来避免与
%put
宏语句混淆。]

如下:

%let y=%sysfunc(putn(&x.,hex4.));

[我认为没有
%put()
宏函数来避免与
%put
宏语句混淆。]

如果要存储十六进制字符串表示形式,可以在Datastep程序中执行

以下是如何:

%let x=42165;
%put &x;

%let y=;

data _null_;
    call symput('y',put(&x,hex4.));
run;

%put &y;

这很有效。如果需要将值存储到数据集中,只需修改程序。

如果要存储十六进制字符串表示形式,可能需要在Datastep程序中执行

以下是如何:

%let x=42165;
%put &x;

%let y=;

data _null_;
    call symput('y',put(&x,hex4.));
run;

%put &y;

这很有效。如果需要将值存储到数据集中,只需修改程序即可。

Jeff的回答很好,但如果您通过
%sysfunc
生成
&x
作为数据步函数的输出,则可以使用%sysfunc本身应用格式来保存几个字符,例如

%let y = %sysfunc(sum(42000, 165), hex4.);

Jeff的回答很好,但是如果您通过
%sysfunc
生成
&x
作为数据步进函数的输出,您可以使用%sysfunc本身应用格式来保存几个字符,例如

%let y = %sysfunc(sum(42000, 165), hex4.);

您如何知道对格式
hex.
使用
4
?它指定输出字符串的长度。如果您的数字范围大于#FFFF,您需要选择更大的数字。没有
%put()
,因为这不是宏语言的正常用法
put()
put
(日志/文件写入)都存在于数据步语言中。您如何知道将
4
用于格式
hex.
?它指定输出字符串的长度。如果您的数字范围大于#FFFF,您需要选择更大的数字。没有
%put()
,因为这不是宏语言的正常用法
put()
put
(日志/文件写入)都存在于数据步语言中。