1
我有一個Stata插件,它允許我從文件中讀取SQL,在PostgreSQL服務器上運行它,並將數據傳送到Stata。如何在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 ([email protected])
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;
我不知道我的理解。你能準確發佈**嗎?'pgload'語法應該是怎樣的?我的意思是,用適當的文本替換本地宏'conn'和'exec'。 – 2015-02-07 22:24:34
下面是調用'pgload'的示例: 'pgload「dbname = crsp host = localhost」「SELECT permno,date,abs(prc)AS prc FROM crsp.dsf LIMIT 10」'。 我想要做的就是通過'SELECT * \ n FROM some_table \ n - 要求某些內容爲真\ n WHERE some_boolean; \ n'到'pgload'其中'\ n'代表換行符。正如代碼所示,我加載的文本文件中的換行符變成空格,以便我得到'SELECT * FROM some_table - 要求某些內容爲true WHERE some_boolean;',這不起作用。 – 2015-02-07 22:52:56
我只是發現Stata命令需要插入換行符纔是不尋常的。如果是這樣,我認爲'pgload'本身應該指明方式。我從來沒有面對或聽說過這種情況(儘管我的經歷相對較短)。 – 2015-02-07 23:18:41