问题标签 [proc-sql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1086 浏览

sas - 在 proc sql 中使用宏与 ODBC 连接到 Access 数据库

我有一个名为 fileName 的宏变量。我尝试在通过 ODBC 连接到 Access 数据库的 proc sql 中使用它。但是,我的代码要么有错误,要么无法识别宏变量。

这是我的代码:

这将返回 0 行。如果我用查询中的实际值替换宏变量,它将返回 1 行正确的数据。

如果我在 &fileName 周围使用双引号,则会收到以下错误:错误:CLI 描述错误:[Microsoft][ODBC Microsoft Access Driver] '' is not a valid name。确保它不包含无效字符或标点符号,并且不要太长。

谁能告诉我应该如何将宏变量传递给查询?谢谢。

0 投票
2 回答
11670 浏览

sql - PROC SQL 错误:“错误:使用等于 (=) 的表达式具有不同数据类型的组件。”

我正在尝试使用 对我的数据进行子集化PROC SQL,当我使用我的变量时它给了我一个错误TNM_CLIN_STAGE_GROUP。下面的例子:

当我运行相同的代码,但取出变量TNM_CLIN_STAGE_GROUP时,代码可以工作。任何人都知道该变量名称的问题是什么?

0 投票
1 回答
5984 浏览

loops - SAS 使用 PROC SQL INSERT 语句填充表并执行循环

这是一个流行病学项目。我想计算 1961 年至 2013 年间不同人群的疾病频率:所有年龄段的男性、50 岁以上的男性和同样的两个女性病例。

首先,我导入了一个名为“pop_compl”的人口表,其中包含在上述时间跨度内男性(性别 = 1)和女性(性别 = 0,无冒犯)不同年龄段的人口数量。

然后,我使用 PROC SQL 在 SAS 中创建了空表:

现在,我想在上面的每个表格(以及后来的第三个“案例”)的前两列(年份和人口)中填充值,以便稍后在表格中计算所需的比率。列年份应填充值 1961-2013,列人口与 1961 年至 2013 年间每年的“pop_compl”中的相应人口数。

我想通过在宏和 do 循环中使用插入语句来做到这一点。看起来像这样:

尽管这似乎在逻辑上是正确的,但 SAS 抱怨在 values 语句中使用查询 - 摘录:

我尝试了几件事,更改了变量类型等等。没有任何帮助,我真的认为这是 SAS SQL 限制。我正在使用 SAS 9.2 32 位。目前,我不知道如何解决这个问题,也没有想出另一种快速的方法来做同样的事情。

0 投票
1 回答
2471 浏览

sql - 按组汇总以制作复合键

我有一个详细的表格,例如:

现在我想根据 3 列(COMPANY DATE GROUP)创建一个复合唯一键,因此输出如下:

我使用过查询(SQL),例如: Create table TEMP as select DISTINCT COMPANY, DATE, GROUP, sum(AMT) from table group by COMPANY, DATE, GROUP

注意:我需要创建一个基于 3 列(COMPANY DATE GROUP)的带有复合键的表,以便我可以将它与另一个表连接起来。我可以通过连接三个来创建复合键,但由于 3 的重复组合列,就很难得到想要的结果。

0 投票
2 回答
2117 浏览

sas - SAS Proc SQL Trim 不起作用?

我有一个看起来很简单的问题(可能是......),但我无法让它工作。

数据集“列表”中的变量“名称”的长度为 20。我希望有条件地将值选择到宏变量中,但通常所需的值小于分配的长度。这会在最后留下尾随空白,因为它们会破坏宏变量的未来调用,所以我不能拥有这些空白。

我已经尝试过修剪、压缩、btrim、left(trim 和其他解决方案,但似乎没有什么能给我我想要的东西(这是没有空格的 'Joe')。这似乎应该比它更容易...... .. 帮助。

0 投票
2 回答
19542 浏览

sql - SAS Proc sql 行号

如何在 proc sql 中获取观察的行号,类似于 proc sql 中数据步的 _N_?

例如

想:

0 投票
2 回答
1513 浏览

sas - Proc SQL中“where ... in (...)”子句的最大数量或参数?

假设我正在对一个表进行子集化并在proc sql. 该代码使用where ... in子句和子查询来进行子集设置。我知道一些 SQL 引擎会对where ... in子句的参数数量设置一些限制。SAS对此有限制吗?这个问题将适用于这样的程序:

如果longlist返回 10,000 个 ID 怎么办?10,000,000 怎么样?

0 投票
1 回答
346 浏览

sas - 使用 %put 和 cat 用 SAS MACRO 代码编写 SQL 语句

我想编写一个宏来运行附加 10 个查询的结果,这些查询是我用 SAS 宏代码生成的。

我收到多个错误。第一个是——A character operand was found in the %EVAL function or %IF condition where a numeric operand is required.

请解释并更正。

仅供参考:我对 SAS 编程非常陌生。我使用 SAS 企业指南

0 投票
3 回答
128 浏览

sas - 如何用条件创建这个宏?

样本输入数据:
FirstName LastName Group Age LastVenue Position
Jack Smith ULDA 25 TheaterA 1
Jesse James GODL 37 TheaterB 12
Jane Doe ULDA 29 TheaterA 3
Izzy Gord IIPA 41 TheaterC 8
Ann Roswell GODL 30 TheaterB 16
Chelsea Jenk ULDA 19 TheaterA 11

我正在尝试创建:
%macro group_members(group=); proc print data=sample; var Position Age Group FirstName LastName; where group=&group; %mend group_members;

但是我想向它添加条件,所以如果没有输入任何内容,%group_members()那么它将按照上面显示的变量顺序显示所有组。如果在这种情况下输入了一个无效组:%group_members(LOL)那么我希望将一条注释发送到日志%put 'An invalid group was entered'。因此不应该打印任何内容。我正在尝试在更大的数据集上创建一个非常相似的程序。
我感谢任何高级帮助!谢谢 :)

到目前为止,我已经尝试过:
%macro group_members(group=); proc sql; select count(*) into :ct from sample where group="&group" quit; proc print data=sample; %if &group ^= %then %do; where group="&group."; %end; %if &ct = 0 %then %put An Invalid group was entered; %else %do; where group="&group."; %end; run; %mend group_members;

我从每个测试中得到错误..例如%group_members()返回错误:
ERROR: More positional parameters found than defined

0 投票
1 回答
55 浏览

sql - 将两个表中的列相加,然后连接表

我有两个表以相同的方式设置,但值不同。以下是每个示例:

表格1:

表2:

我希望结果表包含所有唯一的日期代码对,表之间的任何重复项都具有两个总和的计数。

输出表:

我没有连接这两个表的主键,而且我尝试过的连接要么没有保留所有不同的日期代码对,要么创建了重复项。

作为参考,我在 SAS proc sql 语句中执行此操作。