Stata 位数的标量格式问题
我正在尝试编写一个命令,该命令将百分比舍入到小数点后2位。百分比可以是负数或正数,小数点前的位数未知 这里的MRE显示了我的问题Stata 位数的标量格式问题,stata,stata-macros,Stata,Stata Macros,我正在尝试编写一个命令,该命令将百分比舍入到小数点后2位。百分比可以是负数或正数,小数点前的位数未知 这里的MRE显示了我的问题 #delimit; capture program drop my_note; program my_note, eclass; local my_x: display %-9.2f 92.23999999999999; ereturn scalar my_x = `my_x'; end; ereturn clear; my_note; eretu
#delimit;
capture program drop my_note;
program my_note, eclass;
local my_x: display %-9.2f 92.23999999999999;
ereturn scalar my_x = `my_x';
end;
ereturn clear;
my_note;
ereturn list;
display %-9.2f 92.23999999999999;
display 92.23999999999999;
我不明白为什么显示似乎做了正确的事情(将92.239999999999变为92.24,尽管不考虑格式),但e(my_x)似乎并没有继承该格式。当创建标量时,您复制了
`my_x'
,值仍然是92.239999999999
,因为:display
不会更改基础数据,只更改其显示方式。将其视为5.00e+2
和500
中的数据是相同的,只是该值的显示方式不同
您需要使用字符串来处理值的显示方式。但是,代码示例中的字符串有两个问题
%-9.2f
中,指定显示格式为9个字符长,因此标量将为e(my_x):“92.24”
。您可以调整%-9.2f
,但由于现在正在处理字符串,因此可以使用trim()
函数删除多余的空格#delimit;
capture program drop my_note;
program my_note, eclass;
local my_x: display %-9.2f 92.23999999999999;
ereturn local my_x = trim("`my_x'");
end;
ereturn clear;
my_note;
ereturn list;
创建标量时,复制
`my_x'
的值,该值仍然是92.239999999999
,因为:display
不会更改基础数据,只更改其显示方式。将其视为5.00e+2
和500
中的数据是相同的,只是该值的显示方式不同
您需要使用字符串来处理值的显示方式。但是,代码示例中的字符串有两个问题
%-9.2f
中,指定显示格式为9个字符长,因此标量将为e(my_x):“92.24”
。您可以调整%-9.2f
,但由于现在正在处理字符串,因此可以使用trim()
函数删除多余的空格#delimit;
capture program drop my_note;
program my_note, eclass;
local my_x: display %-9.2f 92.23999999999999;
ereturn local my_x = trim("`my_x'");
end;
ereturn clear;
my_note;
ereturn list;
正如您所知,每个变量都有一个可以更改的显示格式。格式在很大程度上是变量的属性。当您在本地宏上使用显示格式时,本地宏既看不到也不记得该格式:它是宏的内容,一旦计算完毕,就会显示出来。您可以选择返回一个包含格式化内容的本地宏、一个字符串标量同上,以及一个按需显示的数字标量。@NickCox是正确的。变量的格式化和舍入是两件独立的事情。正如您所知,每个变量都有一个显示格式,您可以对其进行更改。格式在很大程度上是变量的属性。当您在本地宏上使用显示格式时,本地宏既看不到也不记得该格式:它是宏的内容,一旦计算完毕,就会显示出来。您可以选择返回一个包含格式化内容的本地宏、一个字符串标量同上,以及一个按需显示的数字标量。@NickCox是正确的。对变量进行格式化和舍入是两件独立的事情。