如何将换行符插入 Stata 宏变量?
How do I insert newline characters into Stata macro variables?
我有一个 Stata 插件,它允许我从文件中读取 SQL,运行 它在我的 PostgreSQL 服务器上,并将数据传送到 Stata。
不幸的是,我的很多 SQL 依赖于正确解析换行符以生成正确的(甚至有效的)SQL。例如,
SELECT *
FROM some_table
-- Require something to be true
WHERE some_boolean;
在 Stata 中以 SELECT * FROM some_table -- Require something to be true WHERE some_boolean;
结束,这显然是行不通的。
这是我用来读取数据的 .ado
文件。我尝试了很多方法,但找不到将换行符放入 exec
变量的方法。
program define loadsql
*! Load the output of an SQL file into Stata, version 1.4 (iandgow@gmail.com)
version 13.1
syntax using/, CONN(string)
#delimit;
tempname sqlfile exec line;
file open `sqlfile' using `"`using'"', read text;
file read `sqlfile' `line';
while r(eof)==0 {;
local `exec' `"``exec'' ``line''
"';
file read `sqlfile' `line';
};
file close `sqlfile';
* display "`conn'";
pgload "`conn'" "``exec''", clear;
* pgload "``dsn''" "SELECT permno, date, abs(prc) AS prc FROM crsp.dsf LIMIT 10", clear;
end;
使用 char(10)
(或者在 Windows 上使用 char(13) + char(10)
)。
因此,替换
local `exec' `"``exec'' ``line''
"';
在问题中提供的 .ado
文件中
local `exec' = "``exec''" + char(10) + "``line''";
我有一个 Stata 插件,它允许我从文件中读取 SQL,运行 它在我的 PostgreSQL 服务器上,并将数据传送到 Stata。
不幸的是,我的很多 SQL 依赖于正确解析换行符以生成正确的(甚至有效的)SQL。例如,
SELECT *
FROM some_table
-- Require something to be true
WHERE some_boolean;
在 Stata 中以 SELECT * FROM some_table -- Require something to be true WHERE some_boolean;
结束,这显然是行不通的。
这是我用来读取数据的 .ado
文件。我尝试了很多方法,但找不到将换行符放入 exec
变量的方法。
program define loadsql
*! Load the output of an SQL file into Stata, version 1.4 (iandgow@gmail.com)
version 13.1
syntax using/, CONN(string)
#delimit;
tempname sqlfile exec line;
file open `sqlfile' using `"`using'"', read text;
file read `sqlfile' `line';
while r(eof)==0 {;
local `exec' `"``exec'' ``line''
"';
file read `sqlfile' `line';
};
file close `sqlfile';
* display "`conn'";
pgload "`conn'" "``exec''", clear;
* pgload "``dsn''" "SELECT permno, date, abs(prc) AS prc FROM crsp.dsf LIMIT 10", clear;
end;
使用 char(10)
(或者在 Windows 上使用 char(13) + char(10)
)。
因此,替换
local `exec' `"``exec'' ``line''
"';
在问题中提供的 .ado
文件中
local `exec' = "``exec''" + char(10) + "``line''";