python - SAS 类似于 Python 中的宏
问题描述
我对 Python 世界很陌生,并且已经开始逐渐学习编码。我实际上是在尝试用 Python 实现我所有的 SAS 代码,看看它们是如何工作的。我的代码之一涉及使用宏。代码看起来像这样
%macro bank_data (var,month);
proc sql;
create table work_&var. as select a.accountid, a.customerseg. a.product, a.month, b.deliquency_bucket from
table one as a left join mibase.corporate_&month. as b
on a.accountid=b. accountid and a.month=b.&month;
quit
%mend;
% bank_data (1, 202010);
%bank_data(2,202011);
%bank_data(3,202012);
我对 python 中的合并步骤很满意,但想了解如何在 Python 中执行此宏步骤?
解决方案
如果您尝试从 python 运行此 SQL,我建议您这样做
import pyodbc
var = [1,2,3]
months = [202010,202011,202012]
def bank_data(var, month):
# search for how to format connection string
cnc_string = "DRIVER={SQL Server};SERVER=YOURSERVER;DATABASE=YOURDATABASE;Trusted_Connection=yes"
query = f"""
proc sql;
create table work_{var}. as select a.accountid, a.customerseg. a.product, a.month, b.deliquency_bucket from
table one as a left join mibase.corporate_{month}. as b
on a.accountid=b. accountid and a.month=b.{month};
quit
"""
with pyodbc.connect(conn_str) as conn:
conn.execute(query)
for v, m in zip(var, months):
bank_data(v, m)
我也有点懒,你应该真正参数化它以防止 sql 注入pyodbc - 如何使用变量作为参数执行选择语句
推荐阅读
- visual-studio - 如何在构建时在 Blazor 项目中运行 T4 模板
- flutter - 颤振返回导航不会触发 RouteAware didPop()
- recursion - 关于 BST 递归的困惑
- node.js - 首次运行后不接受命令行
- python - 如何简洁地列出类和对象的所有属性?
- eiffel - eiffel:集群有两个同名的类
- php - 如何使用 cUrl 和 PHP 迭代和循环这个 XML 响应?
- python - 如何在文本文件中使用 levenshtein 距离找到与另一个相似的句子的开头?
- java - 在多个活动之间传递值
- cefsharp - 有没有办法在 CefGlue(Windows 窗体 c# 应用程序)中加载 ReactJs 扩展?