2015-02-07 75 views
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; 
+0

我不知道我的理解。你能準確發佈**嗎?'pgload'語法應該是怎樣的?我的意思是,用適當的文本替換本地宏'conn'和'exec'。 – 2015-02-07 22:24:34

+0

下面是調用'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

+0

我只是發現Stata命令需要插入換行符纔是不尋常的。如果是這樣,我認爲'pgload'本身應該指明方式。我從來沒有面對或聽說過這種情況(儘管我的經歷相對較短)。 – 2015-02-07 23:18:41

回答

1

使用char(10)(或者在Windows char(13) + char(10))。

因此,更換

local `exec' `"``exec'' ``line'' 
"'; 
中的問題提供的 .ado文件

local `exec' = "``exec''" + char(10) + "``line''"; 
相關問題