【问题标题】:How do I export a SQL query into SPSS?如何将 SQL 查询导出到 SPSS?
【发布时间】:2014-03-12 17:15:47
【问题描述】:

我有这个用 T-SQL 编写的怪物查询,它汇集并处理来自多个表的数据。我可以很容易地将结果导出到 CSV 或 Excel,但想将其直接发送到 SPSS。 SPSS 中的 ODBC 驱动程序仅识别我的 SQL 数据库中的表和视图。任何想法如何将我的查询结果输入 SPSS?

选项:

  • 导出到 Excel 然后导入到 SPSS...格式化日期等内容变得难以处理
  • 将查询另存为我的数据库中的表...但是每次运行查询时我都必须创建一个新表,是吗?
  • 按照下面的建议,只需在我的 SPSS 语法的 GET DATA 语句中运行我的 SQL 语句,但我正在为此苦苦挣扎......

更新:在尝试使用 SPSS 运行我的 SQL 查询时,我编辑了此代码并收到此错误,表明 SPSS 不喜欢我的 nvarchar 声明(目前正在研究如何使用替代方法处理此问题)。我已经测试了我在 SPSS 和 SQL 之间的连接,并且连接良好:

SQLExecDirect failed :[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'N'.

这是我的简化查询,仅从一张表中提取一个字段:

GET DATA 
/TYPE=ODBC 
/CONNECT='DSN=temp_Hisp;Description=tempHisp;UID=;Trusted_Connection=Yes;APP=IBM SPSS '+ 
'Products: Statistics Common;WSID=ARCH5-50;DATABASE=temp_HispTreat' 
/SQL='With CTE_BASENG As (Select StudyID, Visit, Question, CAST(Response As Int) As RESPONSE from temp_HispTreat.dbo.BAS AS PVTable outer apply (values (N'BAS1',BAS1), +'
'(N'BAS24',BAS24)) P(Question, Response)) select SubVis.IRB#, SubVis.StudyID, SubVis.Clin_num, Subvis.Visit, BASENG.BAS_ENGTOT From (Select Distinct IRB#, StudyID, +'
'Clin_Num, Visit_ID As Visit from temp_HispTreat.dbo.Subjects, temp_HispTreat.dbo.StudyStructure where subjects.IRB# = 5516 and StudyStructure.IRB = 5516) As SubVis left join (Select StudyID, +'
'Visit, SUM (Scoring.dbo.GetValue9(response)) As BAS_ENGTOT from CTE_BASENG group by StudyID, Visit) AS BASENG On SubVis.Studyid = BASENG.StudyID And SubVis.Visit = BASENG.Visit'
/ASSUMEDSTRWIDTH=255. 
CACHE.
EXECUTE.

谢谢大家:已解决。让 SPSS 运行 SQL 查询需要进行相当多的调整,但这是将 SQL 数据导出到 SPSS 的最佳方式。在我的情况下,(values (N'BAS1',BAS1) 必须更改为(values ("BAS1",BAS1),但我的所有命令,例如outer applyunion 等,跑得像冠军!感谢您的帮助。

【问题讨论】:

    标签: sql sql-server tsql spss


    【解决方案1】:

    您可以使用GET DATA 过程直接在 SPSS 中从 SQL 导入数据。请参阅SQL 子命令。您可以在此处使用复杂的查询。例如:

    GET DATA
     /TYPE = ODBC
     /CONNECT = "DSN = DSNname"
     /SQL = "SELECT * FROM empl_data "
            "WHERE ((bdate>=#1/1/1960# and edate<=#12/31/1960#) or bdate is null)".
    

    很清楚为什么(values (N'BAS1',BAS1) 会导致错误。因为您使用单引号作为 SQL 子命令 \SQL = ' ' 的参数。 (values (N'BAS1',BAS1) 中的第一个单引号定义了参数的结尾。切换到双引号即可解决。

    我试图重新排列您的代码。我无法测试它,但我相信它应该可以工作:

    GET DATA
      /TYPE = ODBC 
      /CONNECT = "DSN=temp_Hisp;DATABASE=temp_HispTreat"
      /SQL = "With CTE_BASENG As (Select StudyID, Visit, Question, "
               "CAST(Response As Int) As RESPONSE "
             "from temp_HispTreat.dbo.BAS AS PVTable "
             "outer apply (values (N'BAS1',BAS1), (N'BAS24',BAS24)) "
               "P(Question, Response)) "
             "select SubVis.IRB#, SubVis.StudyID, SubVis.Clin_num, Subvis.Visit, "
               "BASENG.BAS_ENGTOT "
             "From (Select Distinct IRB#, StudyID, Clin_Num, Visit_ID As Visit "
             "from temp_HispTreat.dbo.Subjects, temp_HispTreat.dbo.StudyStructure "
             "where subjects.IRB# = 5516 and StudyStructure.IRB = 5516) As SubVis "
             "left join (Select StudyID, Visit, "
               "SUM(Scoring.dbo.GetValue9(response)) As BAS_ENGTOT "
             "from CTE_BASENG group by StudyID, Visit) AS BASENG On "
               "SubVis.Studyid = BASENG.StudyID And SubVis.Visit = BASENG.Visit".
    

    【讨论】:

    • 感谢@djhurio,但我的 qry 以 WITH 开头,这是 SPSS 似乎无法识别的声明。 WITH &lt;alias_name&gt; AS (sql_subquery_statement) SELECT column_list FROM &lt;alias_name&gt;[,tablename] [WHERE &lt;join_condition&gt;]
    • 我同意@JKP。这不是SPSS的问题。它应该与您正在使用的 ODBC 数据驱动程序相关。您收到错误消息吗?
    • 检查您的 SQL 语句是否翻译正确。特别注意每行末尾或开头的空白。查看帮助pic.dhe.ibm.com/infocenter/spssstat/v20r0m0/topic/…
    • 它得到的错误信息是Warning. Command name: GET DATA &gt;SQLExecDirect failed :[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'N'. 但我无法终生弄清楚哪个 N 是问题所在。我可以毫无问题地使用 ODBC 代码连接到表和视图。我可以发布我的 SQL 查询代码,为 SPSS 增强。我应该在此处执行此操作还是编辑我的原始问题?
    • 请通过编辑您的问题添加带有GET DATA 语句的SPSS 代码。
    【解决方案2】:

    SQL 由 ODBC 驱动程序处理,因此该驱动程序的功能将决定可以发出哪种类型的 SQL。能力可能是特定于数据库的。有时有多个驱动程序可用于特定数据库,一些来自 IBM SPSS Data Access Pack,一些直接来自 db 供应商,因此您可能需要调查可用于特定数据库的驱动程序。

    【讨论】:

    • 谢谢,@JKP。也许这是一个问题。我正在使用 SPSS 的机构许可,并且尝试去 IBM SPSS 网站下载更多驱动程序由于我无法获得所有许可这一事实而受阻。如果我无法在 SPSS 中调用我的查询,还有其他选择吗?
    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多