楼主: yunnandlg
1666 2

[学习分享] sas连接MySQL [推广有奖]

版主

但问耕耘,莫问收获

已卖:3032份资源

院士

5%

还不是VIP/贵宾

-

威望
0
论坛币
279697 个
通用积分
649.6470
学术水平
1667 点
热心指数
1686 点
信用等级
1650 点
经验
192222 点
帖子
1938
精华
0
在线时间
2781 小时
注册时间
2010-8-28
最后登录
2026-1-1

楼主
yunnandlg 在职认证  学生认证  发表于 2020-9-10 01:43:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
方法一:libname逻辑库做为桥梁连接SAS与MYSQL(不适合数据特别大,100亿条记录3个多小时)

1.下载安装MySQL. http://www.mysql.com/

2.修改环境变量path.增加路径(自己mysql 安装路径“C:\Program Files\MySQL\MySQL Server 5.7\bin”),路径下面包含 libmysql.dll

3.重启电脑

4.连接代码

libname '链接名' mysql user='用户名' password='密码' database='数据库名' server='数据库IP地址'  DBCONINIT='set names GBK';   /*编码设置可不写*/;

libname  myquant MYSQL USER="root"  PASSWORD="XXXXX"  DATABASE="XXX" server="localhost" DBCONINIT="set names utf8";

---------------------------------------------------------------------------

方法二:通过odbc 直接连通 pass through 适合数据特别大,100亿条记录40多分钟

1.odbc配置:在window搜索框搜索ODBC,进入ODBC数据源管理器,添加MySQL用户数据源(系统DSN 中)。

也可以在管理工具->odbc数据源(根据自己电脑是32位还是64位配置)->系统DSN->添加->mysql odbc x.x Unicode Driver(根据自己安装的odbc版本选择).

2.odbc data source confguration 配置

3.pass-through 方式执行 sql 的语句


PROC SQL noprint;
CONNECT TO ODBC (DSN="Mysql_odbc_qxxx" USER="root"  PASSWORD="xxxxx" );
CREATE TABLE quant.test AS
SELECT * FROM CONNECTION TO ODBC (SELECT * FROM stock_financia);
QUIT;

---------------------------------------------------------------------------

也可以:

Libname odbcdb odbc user="root" password="xxxxx" datasrc="Mysql_odbc_qxxx";
proc contents data=odbcdb.stock_fin;run;




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MySQL sql pass-through localhost password

已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
宽客老丁 + 5 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

Cause morning rolls around and it's another day of sun.
清晨不久就会来到,又是阳光明媚的一天。

沙发
yunnandlg 在职认证  学生认证  发表于 2020-9-10 02:09:18
dm "log;clear;odsresult;clear;output;clear;";
options validvarname=ANY;  /*变量名的命名规则拓展;可以用中文等*/
options validmemname=extend;/*数据集的命名规则拓展;可以用中文等*/
options compress=yes;/*压缩数据集的大小*/

/*1、建立逻辑库*/
libname  quant  "F:\xxxx2020\data";
/*2、逻辑库做为桥梁连接SAS与MYSQL*/
libname  mysqldb MYSQL USER="root"  PASSWORD="xxxxx"  DATABASE="db_qxxx" server="localhost" DBCONINIT="set names gbk";


data  quant.stock_fin;/*3、建立数据集*/
set   mysqldb.stock_financia;/*4、引用数据库中的数据表*/
run;
proc contents data=quant.stock_fin;run;
proc print data=quant.stock_fin(obs=5);run;


/*驱动为:odbc,datasrc为在ODBC中配置的用户数据源名称。*/
Libname odbcdb odbc user="root" password="xxxxx" datasrc="Mysql_odbc_qxxx";
proc contents data=odbcdb.stock_fin;run;


PROC SQL noprint;
CONNECT TO ODBC (DSN="Mysql_odbc_qxxx" USER="root"  PASSWORD="xxxxx" );
CREATE TABLE quant.test AS
SELECT * FROM CONNECTION TO ODBC (SELECT * FROM stock_financia);
QUIT;
proc contents data=quant.test;run;
proc print data=quant.test(obs=5);run;

藤椅
tet208 发表于 2020-9-10 15:15:58
pass-through 这种代码是提交到远程执行,速度就是服务器执行速度,相比于libname来说效率高很多, libname这种方式,程序执行过程会有大量数据交换,千兆万兆光纤也未必够,
我这测试通过数据库端口直连 或者 ODBC 传输数据集(没有网络带宽影响),接口速度没办法再提升,不知道lz有没有什么好办法?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 23:33