EViews允许用户使用字符串和替换变量来编辑命令行。例如,字符串变量%x为:
%x="gdp"
则程序命令行ls %x c %x(-1)表示ls gdp c gdp(-1);将字符串x%的内容更改为m1,则程序行所代表的含义是ls m1 c m1(-1)。基于字符串变量在上述例子中的作用,称之为替换变量(Replacement Variable)。
替换变量可以和字母、数字以及其他替换变量结合起来形成更长的字符串,此时,应该用大括号“{ }”加以界定。例如:
%object="group" %space=" " %reg1="gender" %reg2="income" %reg3="age" %regs=%reg1+%space+%reg2+%space+%reg3+%space
用“{ }” 将这些字符串包含进去,表达式为:
{%object} g1 {%regs}
EViews将替换%object和%regs中的字符,因此该命令的结果是:
group g1 gender income age
控制变量同样可以被用作替换变量,例如:
!i=1 series y{!i}=nrnd !j=0 series y{!i}{!j}=nrnd
其与如下命令:
series y1=nrnd series y10=nrnd
表示的结果等价,都表示建立两个序列y1和y01,这些序列是由标准正态分布所生成的随机数序列。
另外,替换变量也可以用于构造对象的名称,例如:
%a="3" %b="2" %c="temp" series z{%b} matrix(3,3) x{%a} vector(3) x_{%c}_y
这些命令分别表示建立一个名为Z2的序列、名为X3的3×3的矩阵以及建立一个名为X_TEMP_Y的向量。替换变量为用户在程序中给对象命名提供了很强的适应性。然而,应该避免使用相同的名字来代表不同的对象。例如,下面的例子就有可能引起混淆:
!a=1 series x{!a} !a=2 matrix(2,2) x{!a}
在上述简单的程序中,可以很清楚地看到x1是序列,而x2是矩阵。但是在相对比较复杂的程序中,对!a=1的赋值和对序列的声明之间可能存在着许多命令行,因此想要清楚地区分替换变量x{!a}所代表的对象比较困难。此时,解决该问题的一个比较好的方法是对不同的对象使用不同的名字,例如:
!a=1 series x{!a} !a=2 matrix(2,2) mat{!a}
EViews会对函数进行参数类型检查,因此在调用带有替换变量的函数时,用户必须使用大括号。带有字符型参数的函数只接收字符型数据,带有序列参数的函数只能接收序列。如果用户希望通过替换变量将序列传入一个序列函数中,就必须将替换变量用大括号括起来,以便让EViews知道使用字符串所代表的是对象,而不是字符串本身。例如,用户希望得到序列income中无缺失值的有效观测值个数,可以使用@obs函数,命令为:
@obs(income)
若用户想要用字符串变量%var代表序列income,则必须在@obs函数中使用替换变量,正确的形式为:
@obs({%var})
若使用函数@obs(%var),则EViews会返回一个错误的信息,因为@obs函数需要使用序列作为参数,而不是字符串。
%var="income"