SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 795|回复: 0
打印 上一主题 下一主题

SAS MACRO IMPORTING SQLITE DATA TABLE WITHOUT ODBC

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-10-22 13:24:01 | 只看该作者

SAS MACRO IMPORTING SQLITE DATA TABLE WITHOUT ODBC

From Wensui Liu's blog

<font face="monospace"><font size="2"><span style="background-color&#58;#ffffff"><font color="#008000">********************************************************;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">* A SAS MACRO IMPORTING SQLITE DATA TABLE WITHOUT ODBC *;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">* ---------------------------------------------------- *;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">* REQUIREMENT&#58;                                         *;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">*   HAVE SQLITE3.EXE DIRECTORY IN THE SYSTEM PATH.     *;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">* LIMITATIONS&#58;                                         *;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">*   1. UNABLE TO HANDLE THE TABLE WITH BLOB DATA TYPE  *;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">*   2. THE DEFAULT LENGTH OF ALL CHAR DATA IS 200      *;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">*   3. SYSTEM DEPENDENT (CHANGES NEEDED FOR OTHER OS)  *;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">*   4. POTENTIALLY SLOW FOR LARGE TABLES               *;</font></span><br /><span style="background-color&#58;#ffffff"><font color="#008000">********************************************************;</font></span><br /><br /><span style="background-color&#58;#ffffff"><font color="#0000ff">%let</font></span> chlen = <span style="background-color&#58;#ffffff"><font color="#2e8b57"><b>200</b></font></span>;<br /><br /><span style="background-color&#58;#ffffff"><font color="#0000ff">options</font></span> mlogic symbolgen mprint;<br /><br /><span style="background-color&#58;#ffffff"><font color="#0000ff">%macro</font></span> sqlite(path = , dbfile = , <span style="background-color&#58;#ffffff"><font color="#0000ff">table</font></span> = );<br /><br /><span style="background-color&#58;#ffffff"><font color="#0000ff">%let</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">fileref</font></span> = <span style="background-color&#58;#ffffff"><font color="#0000ff">%trim</font></span>(<font color="#0000ff"><b>&amp;path</b></font>)\<span style="background-color&#58;#ffffff"><font color="#0000ff">%trim</font></span>(<font color="#0000ff"><b>&amp;dbfile</b></font>);<br /><br /><span style="background-color&#58;#ffffff"><font color="#0000ff">filename</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">fileref</font></span> <span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;&amp;fileref&quot;</font></span>;<br /><br /><span style="background-color&#58;#ffffff"><font color="#0000ff">%if</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">%sysfunc</font></span>(<span style="background-color&#58;#ffffff"><font color="#0000ff">fexist</font></span>(<span style="background-color&#58;#ffffff"><font color="#0000ff">fileref</font></span>)) <span style="background-color&#58;#ffffff"><font color="#0000ff">%then</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">%do</font></span>;<br /><br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">%let</font></span> dumpref = <span style="background-color&#58;#ffffff"><font color="#0000ff">%trim</font></span>(<font color="#0000ff"><b>&amp;path</b></font>)\<span style="background-color&#58;#ffffff"><font color="#0000ff">%trim</font></span>(dump.txt);<br /><br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">filename</font></span> dumpref <span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;&amp;dumpref&quot;</font></span>;<br /><br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">%if</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">%sysfunc</font></span>(<span style="background-color&#58;#ffffff"><font color="#0000ff">fexist</font></span>(dumpref)) <span style="background-color&#58;#ffffff"><font color="#0000ff">%then</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">%do</font></span>;<br />    <span style="background-color&#58;#ffffff"><font color="#000080"><b>data</b></font></span> <font color="#a020f0">_null_</font>;<br />      rc = <span style="background-color&#58;#ffffff"><font color="#0000ff">fdelete</font></span>(<span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;dumpref&quot;</font></span>);<br />    <span style="background-color&#58;#ffffff"><font color="#000080"><b>run</b></font></span>;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">%end</font></span>;<br /><br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">%let</font></span> batref = <span style="background-color&#58;#ffffff"><font color="#0000ff">%trim</font></span>(<font color="#0000ff"><b>&amp;path</b></font>)\<span style="background-color&#58;#ffffff"><font color="#0000ff">%trim</font></span>(dump.bat);<br /><br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">filename</font></span> batref <span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;&amp;batref&quot;</font></span>;<br />  <br /><br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">%if</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">%sysfunc</font></span>(<span style="background-color&#58;#ffffff"><font color="#0000ff">fexist</font></span>(dumpref)) <span style="background-color&#58;#ffffff"><font color="#0000ff">%then</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">%do</font></span>;<br />    <span style="background-color&#58;#ffffff"><font color="#000080"><b>data</b></font></span> <font color="#a020f0">_null_</font>;<br />      rc = <span style="background-color&#58;#ffffff"><font color="#0000ff">fdelete</font></span>(<span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;batref&quot;</font></span>);<br />    <span style="background-color&#58;#ffffff"><font color="#000080"><b>run</b></font></span>;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">%end</font></span>;<br /><br />  <span style="background-color&#58;#ffffff"><font color="#000080"><b>data</b></font></span> <font color="#a020f0">_null_</font>;<br />    <span style="background-color&#58;#ffffff"><font color="#0000ff">file</font></span> batref;<br />    cmd = <span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;sqlite3 &amp;fileref &quot;</font></span>||<span style="background-color&#58;#ffffff"><font color="#a020f0">'&quot;'</font></span>||<span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;.dump &amp;table&quot;</font></span>||<span style="background-color&#58;#ffffff"><font color="#a020f0">'&quot;'</font></span>||<span style="background-color&#58;#ffffff"><font color="#a020f0">&quot; &gt; &amp;dumpref&quot;</font></span>;<br />    <span style="background-color&#58;#ffffff"><font color="#0000ff">put</font></span> cmd;<br />  <span style="background-color&#58;#ffffff"><font color="#000080"><b>run</b></font></span>;<br />  <br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">systask</font></span> command <span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;&amp;batref&quot;</font></span> wait;  <br />      <br /><span style="background-color&#58;#ffffff"><font color="#0000ff">%end</font></span>;<br /><span style="background-color&#58;#ffffff"><font color="#0000ff">%else</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">%goto</font></span> exit;<br /><br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>data</b></font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">create</font></span>;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">infile</font></span> dumpref;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">input</font></span>;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">create</font></span> = <span style="background-color&#58;#ffffff"><font color="#0000ff">upcase</font></span>(<font color="#a020f0">_infile_</font>);<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">if</font></span> <font color="#a020f0">_n_</font> &gt; <span style="background-color&#58;#ffffff"><font color="#2e8b57"><b>1</b></font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">then</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">output</font></span>;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">if</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">substr</font></span>(<span style="background-color&#58;#ffffff"><font color="#0000ff">create</font></span>, <span style="background-color&#58;#ffffff"><font color="#2e8b57"><b>1</b></font></span>, <span style="background-color&#58;#ffffff"><font color="#2e8b57"><b>2</b></font></span>) = <span style="background-color&#58;#ffffff"><font color="#a020f0">');'</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">then</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">stop</font></span>;<br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>run</b></font></span>;<br /><br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>proc sql</b></font></span> noprint;<br /><span style="background-color&#58;#ffffff"><font color="#0000ff">select</font></span><br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">tranwrd</font></span>(<span style="background-color&#58;#ffffff"><font color="#0000ff">create</font></span>, <span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;TEXT&quot;</font></span>, <span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;CHAR(&amp;chlen.)&quot;</font></span>)<br /><span style="background-color&#58;#ffffff"><font color="#0000ff">into</font></span><br />  &#58;<span style="background-color&#58;#ffffff"><font color="#0000ff">create</font></span> separated <span style="background-color&#58;#ffffff"><font color="#0000ff">by</font></span> <span style="background-color&#58;#ffffff"><font color="#a020f0">' '</font></span><br /><span style="background-color&#58;#ffffff"><font color="#0000ff">from</font></span><br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">create</font></span>;<br /><br /><font color="#0000ff"><b>&amp;create</b></font>;<br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>quit</b></font></span>;    <br /><br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>proc datasets</b></font></span> library = work nolist;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">delete</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">create</font></span>(mt = <span style="background-color&#58;#ffffff"><font color="#000080"><b>data</b></font></span>);<br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>run</b></font></span>;<br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>quit</b></font></span>;<br /><br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>data</b></font></span> <font color="#a020f0">_null_</font>;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">infile</font></span> dumpref <span style="background-color&#58;#ffffff"><font color="#0000ff">end</font></span> = eof;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">input</font></span>;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">if</font></span> <font color="#a020f0">_n_</font> = <span style="background-color&#58;#ffffff"><font color="#2e8b57"><b>1</b></font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">then</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">do</font></span>;<br />    <span style="background-color&#58;#ffffff"><font color="#0000ff">call</font></span> execute(<span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;PROC SQL;&quot;</font></span>);<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">end</font></span>;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">if</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">index</font></span>(<span style="background-color&#58;#ffffff"><font color="#0000ff">upcase</font></span>(<font color="#a020f0">_infile_</font>), <span style="background-color&#58;#ffffff"><font color="#a020f0">'INSERT INTO'</font></span>) &gt; <span style="background-color&#58;#ffffff"><font color="#2e8b57"><b>0</b></font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">then</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">do</font></span>;<br />    pos1 = <span style="background-color&#58;#ffffff"><font color="#0000ff">index</font></span>(<font color="#a020f0">_infile_</font>, <span style="background-color&#58;#ffffff"><font color="#a020f0">'('</font></span>);<br />    pos2 = <span style="background-color&#58;#ffffff"><font color="#0000ff">index</font></span>(<font color="#a020f0">_infile_</font>, <span style="background-color&#58;#ffffff"><font color="#a020f0">');'</font></span>);    <br />    <span style="background-color&#58;#ffffff"><font color="#0000ff">insert</font></span> = <span style="background-color&#58;#ffffff"><font color="#0000ff">substr</font></span>(<font color="#a020f0">_infile_</font>, pos1, pos2 - pos1 + <span style="background-color&#58;#ffffff"><font color="#2e8b57"><b>2</b></font></span>);<br />    <span style="background-color&#58;#ffffff"><font color="#0000ff">call</font></span> execute(<span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;INSERT INTO &amp;TABLE VALUES&quot;</font></span>||<span style="background-color&#58;#ffffff"><font color="#0000ff">insert</font></span>);<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">end</font></span>;<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">if</font></span> eof <span style="background-color&#58;#ffffff"><font color="#0000ff">then</font></span> <span style="background-color&#58;#ffffff"><font color="#0000ff">do</font></span>;<br />    <span style="background-color&#58;#ffffff"><font color="#0000ff">call</font></span> execute(<span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;QUIT;&quot;</font></span>);<br />  <span style="background-color&#58;#ffffff"><font color="#0000ff">end</font></span>;<br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>run</b></font></span>;<br /><br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>data</b></font></span> <font color="#a020f0">_null_</font>;<br />  rc = <span style="background-color&#58;#ffffff"><font color="#0000ff">fdelete</font></span>(<span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;batref&quot;</font></span>);<br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>run</b></font></span>;<br /><br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>data</b></font></span> <font color="#a020f0">_null_</font>;<br />  rc = <span style="background-color&#58;#ffffff"><font color="#0000ff">fdelete</font></span>(<span style="background-color&#58;#ffffff"><font color="#a020f0">&quot;dumpref&quot;</font></span>);<br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>run</b></font></span>;<br /><br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>proc contents</b></font></span> <span style="background-color&#58;#ffffff"><font color="#000080"><b>data</b></font></span> = <font color="#0000ff"><b>&amp;table</b></font> <span style="background-color&#58;#ffffff"><font color="#0000ff">varnum</font></span>;<br /><span style="background-color&#58;#ffffff"><font color="#000080"><b>run</b></font></span>;<br /><br />%exit&#58;<br />    <br /><span style="background-color&#58;#ffffff"><font color="#0000ff">%mend</font></span> sqlite;    <br /><br />%sqlite(path = D&#58;\sas, dbfile = test.db, <span style="background-color&#58;#ffffff"><font color="#0000ff">table</font></span> = tblco);</font></font>
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-3 22:03 , Processed in 0.066637 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表