问题标签 [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.
sas - 在 proc sql 中使用宏与 ODBC 连接到 Access 数据库
我有一个名为 fileName 的宏变量。我尝试在通过 ODBC 连接到 Access 数据库的 proc sql 中使用它。但是,我的代码要么有错误,要么无法识别宏变量。
这是我的代码:
这将返回 0 行。如果我用查询中的实际值替换宏变量,它将返回 1 行正确的数据。
如果我在 &fileName 周围使用双引号,则会收到以下错误:错误:CLI 描述错误:[Microsoft][ODBC Microsoft Access Driver] '' is not a valid name。确保它不包含无效字符或标点符号,并且不要太长。
谁能告诉我应该如何将宏变量传递给查询?谢谢。
sql - PROC SQL 错误:“错误:使用等于 (=) 的表达式具有不同数据类型的组件。”
我正在尝试使用 对我的数据进行子集化PROC SQL
,当我使用我的变量时它给了我一个错误TNM_CLIN_STAGE_GROUP
。下面的例子:
当我运行相同的代码,但取出变量TNM_CLIN_STAGE_GROUP
时,代码可以工作。任何人都知道该变量名称的问题是什么?
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 位。目前,我不知道如何解决这个问题,也没有想出另一种快速的方法来做同样的事情。
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 的重复组合列,就很难得到想要的结果。
sas - SAS Proc SQL Trim 不起作用?
我有一个看起来很简单的问题(可能是......),但我无法让它工作。
数据集“列表”中的变量“名称”的长度为 20。我希望有条件地将值选择到宏变量中,但通常所需的值小于分配的长度。这会在最后留下尾随空白,因为它们会破坏宏变量的未来调用,所以我不能拥有这些空白。
我已经尝试过修剪、压缩、btrim、left(trim 和其他解决方案,但似乎没有什么能给我我想要的东西(这是没有空格的 'Joe')。这似乎应该比它更容易...... .. 帮助。
sql - SAS Proc sql 行号
如何在 proc sql 中获取观察的行号,类似于 proc sql 中数据步的 _N_?
例如
想:
sas - Proc SQL中“where ... in (...)”子句的最大数量或参数?
假设我正在对一个表进行子集化并在proc sql
. 该代码使用where ... in
子句和子查询来进行子集设置。我知道一些 SQL 引擎会对where ... in
子句的参数数量设置一些限制。SAS对此有限制吗?这个问题将适用于这样的程序:
如果longlist
返回 10,000 个 ID 怎么办?10,000,000 怎么样?
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 企业指南
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
sql - 将两个表中的列相加,然后连接表
我有两个表以相同的方式设置,但值不同。以下是每个示例:
表格1:
表2:
我希望结果表包含所有唯一的日期代码对,表之间的任何重复项都具有两个总和的计数。
输出表:
我没有连接这两个表的主键,而且我尝试过的连接要么没有保留所有不同的日期代码对,要么创建了重复项。
作为参考,我在 SAS proc sql 语句中执行此操作。