Sas 将格式为的数字转换为字符串

Sas 将格式为的数字转换为字符串,sas,Sas,如何将数字或货币变量转换为字符串,使其格式保持为字符串的一部分 例如,下面的代码有一个字符变量MSRP\u to\u text,和一个货币变量MSRP。当我将MSRP\u设置为\u text等于MSRP时,它接受未格式化的数字并将其转换为字符串,因此美元符号和逗号消失 DATA want; SET SASHELP.CARS(KEEP=MSRP); ATTRIB MSRP_to_text FORMAT=$8.; MSRP_to_text = MSRP; RUN; 换句话说,代

如何将数字或货币变量转换为字符串,使其格式保持为字符串的一部分

例如,下面的代码有一个字符变量
MSRP\u to\u text
,和一个货币变量
MSRP
。当我将
MSRP\u设置为\u text
等于
MSRP
时,它接受未格式化的数字并将其转换为字符串,因此美元符号和逗号消失

DATA want;
   SET SASHELP.CARS(KEEP=MSRP);
   ATTRIB MSRP_to_text FORMAT=$8.;

   MSRP_to_text = MSRP;
RUN;
换句话说,代码当前正在转换
$36945->“36945”
,但我真正想要的是
$36945->“$36945”


有没有办法在字符串中保留美元符号和逗号?

使用PUT函数将数字转换为字符,而不是ATTRIB语句。它将保持文本值的格式。由于MSRP的原始格式为DOLLAR8,所以在put语句中使用相同的格式就足够了

DATA want;
   SET SASHELP.CARS(KEEP=MSRP);
   MSRP_to_text = put(MSRP, DOLLAR8.);
RUN;

proc contents data=want; run;

v值
函数将检索变量的格式化值

MSRP_as_text = VVALUE(MSRP);
VVALUEX
对于变量名是动态的情况更进一步;例如被存储在不同的变量中,或者是从某种名称模式算法计算出来的

name = 'MSRP';
formatted_value = VVALUEX(name);

你为什么附上8美元。设置新变量的格式?如果要将其长度设置为$8,请使用“长度”属性。没有必要附上8美元。格式化,因为SAS已经知道如何显示字符串。您想在新字符变量中使值左对齐还是右对齐<代码>'$36945'vs
'$36945'
这是一个很好的答案!我认为SAS必须有一些功能,但在搜索了一段时间后,我似乎没有找到正确的关键字组合。我喜欢你添加更多关于
VVALUEX
的信息。我从未想过要寻找这样的函数,但它可能真的很有用,谢谢!虽然这个答案有效,但我选择Richard的,因为
VVALUE
不需要像
PUT
那样的格式。
VVALUE
在数据步运行时使用与变量相关联的格式。如果要使用特定或动态格式映射值,而不考虑当前格式或无格式,则可以使用
PUT/PUTN/PUTC
函数进行映射。