Stata:为什么这两个字符串不一样?

时间:2016-03-06 20:04:46

标签: stata

我定义了两个局部变量str1和str2,包含具有相同字符的字符串---唯一的区别是str2被分成两行。它们都显示相同的字符串,但str2的长度仅为1,因此与str1不同。为什么会这样?

local str1 "abc"
display "`str1'"
. abc
display strlen("`str1'")  // get string length
. 3

local str2 "a" ///
           "bc"
display "`str2'"
. abc
display strlen("`str2'")
. 1

display ("`str1'" == "`str2'")
. 0

2 个答案:

答案 0 :(得分:2)

你的问题不在于在两行之间打破你的字符串,而是将它分成两部分。考虑

. local str3 "a" "bc"
. display "`str3'"
abc
. display strlen("`str3'")
1

查看help local表明您尝试的语法 - 为宏提供两个字符串常量 - 不在文档语法的范围内。请考虑允许定义表达式的语法,并使用它来连接两个字符串。

. local str4 = "a" ///
>              + "bc"
. display "`str4'"
abc
. display strlen("`str4'")
3

答案 1 :(得分:1)

这里的基本原则是你对str2的定义具有无意义的结果,即在本地宏中包含中间双引号。因此,除非您通过 compound 双引号分隔宏,否则您将获得误导性结果。

同样重要的是,display具有演示角色和报告角色,并在某种程度上解释了为其提供的内容。因此,它并不总是完全字面意义。特别是,在显示字符串之前,它将剥离分隔符或它认为是分隔符的分隔符。通常这是纯粹的功能,但在您的示例中,它会阻止您查看定义的后果。

因此,这个难题集中在双引号" "在Stata中有两个角色,字符串分隔符和文字字符这一事实。

. local str2 "a" ///
>            "bc"

. display "`str2'"
abc

. display `"`str2'"' 
a"            "bc

. display strlen("`str2'")
1

. display strlen(`"`str2'"')
17