如何将换行符插入Stata宏变量?

如何将换行符插入Stata宏变量?,stata,Stata,我有一个Stata插件,它允许我从文件中读取SQL,在PostgreSQL服务器上运行它,并将数据传递给Stata 不幸的是,我的许多SQL依赖于正确解析换行符,以便生成正确甚至有效的SQL。比如说, 挑选* 从某张桌子上 -要求某事是真实的 其中一些是布尔的; 在Stata中结束为SELECT*FROM some_table-要求某些内容为true,其中某些_boolean;,这显然不起作用 下面是我用来读取数据的.ado文件。我尝试了许多方法,但找不到将换行符放入exec变量的方法 prog

我有一个Stata插件,它允许我从文件中读取SQL,在PostgreSQL服务器上运行它,并将数据传递给Stata

不幸的是,我的许多SQL依赖于正确解析换行符,以便生成正确甚至有效的SQL。比如说,

挑选* 从某张桌子上 -要求某事是真实的 其中一些是布尔的; 在Stata中结束为SELECT*FROM some_table-要求某些内容为true,其中某些_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;
在Windows上使用char10或char13+char10

因此,替换

local `exec' `"``exec'' ``line'' 
 "';
在问题中提供的.ado文件中

local `exec' = "``exec''" + char(10) + "``line''";

我不太明白。你能给出pgload语法应该是怎样的吗?我的意思是,用适当的文本替换本地宏conn和exec。我希望能够做的是传递SELECT*\n从某个\u表\n-要求某个东西为真\n其中某个\u布尔\n到pgload,其中\n表示换行符。正如代码所示,我加载的文本文件中的换行将变为空格,以从某个_表中获取SELECT*-要求某些东西为真,其中某个_boolean;,我只是觉得Stata命令需要插入换行符是不寻常的。如果是这样,我认为pgload本身应该指明方向。虽然我的经验相对较短,但我从未遇到或听说/读到过这种情况。要求这样做的不是Stata,而是PostgreSQL或SQL。SQL使用换行符确定以-开头的注释的结尾。换句话说,我不想让PostgreSQL去处理——要求某些东西是真的,其中一些是布尔的;作为评论;WHERE some_boolean意味着影响查询结果。让我再试一次:您需要本地exec而不是变量保存哪些字符?换句话说,SQL会理解哪些字符是新行?是\n还是将\n用作希望找到的某些字符的占位符?