首页 > 解决方案 > 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 中执行此宏步骤?

标签: pythonsas

解决方案


如果您尝试从 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 - 如何使用变量作为参数执行选择语句


推荐阅读