问题标签 [sas-macro]

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 投票
4 回答
5774 浏览

sas - When to use IF or %IF in SAS

I am new to SAS and having a hard time figuring out when should the simple If-Then-else and when should %IF-%THEN-%ELSE should be used. As an example code below:

I am trying to get the first line(header) and taking the parameter fdate. Based on the value of this parameter, I am parsing the subsequent input lines differently. But this does not seem to work, as only the second input part runs (always getting parameter 'rectype' in output).

Any suggestions as what i might be doing wrong?

0 投票
3 回答
7386 浏览

sas - SAS - 从宏变量创建变量

我有一个 SAS 数据集,它有 20 个字符变量,所有这些都是名称(例如 Adam、Bob、Cathy 等)

我想要一个动态代码来创建名为 Adam_ref、Bob_ref 等的变量。即使存在具有不同名称的不同数据集(即不想手动定义每个变量),它也可以工作。

到目前为止,我的方法是使用 proc 内容来获取所有变量名称,然后使用宏来创建宏变量 Adam_ref、Bob_ref 等。

如何从这里在数据集中创建实际变量?我需要不同的方法吗?

0 投票
2 回答
4017 浏览

sas - SAS 9.3 中的“For in”循环等效项

我正在寻找SAS 9.3 宏语言中for in循环(如在Python或 R 中)的等价物。DO 循环似乎是解决方案,但并没有完全按照我的意愿工作。我建立了一种在数据步骤中使用DO 循环执行此操作的方法,但它不适用于宏语言。例如,在数据步骤中,此代码正在运行:

然后按预期出现日志提示:

当我尝试对宏中的%DO循环执行相同操作时,出现错误。

日志提示这些消息:

我是 SAS 和 stackoverflow 的新手,所以我希望我的问题不会太愚蠢。在 Python 和 R 中做到这一点非常简单,那么它必须有一种简单的方法在 SAS 中做到这一点。

感谢您的帮助 - J. Muller

0 投票
1 回答
1833 浏览

sas - 从 SAS 数据集中提取子数据并应用于不同的数据集

我编写了一个宏来proc univariate计算数据集中变量的自定义分位数(比如dsn1%cust_quants(dsn= , varlist= , quant_list= )。输出是一个汇总数据集(比如dsn2),如下所示:

我想做的是使用汇总数据集来限制/限制原始数据集中的极值。我的想法是提取感兴趣的列(例如q_99)并将其放入宏变量向量中(例如q_99_1, q_99_2, ..., q_99_n)。然后我可以执行以下操作:

R中,很容易做到这一点。可以使用像索引这样的矩阵从数据帧中提取子数据,并将该子数据分配给一个对象。然后可以稍后引用第二个对象。R示例——b从数据帧中提取a

是否可以在 SAS 中做同样的事情?我希望能够将一列子数据分配给宏变量/数组,这样我就可以在第二个数据步骤中使用宏/数组。一种想法是proc sql into:

但是,当我真正想要的是变量向量(或数组——SAS 中没有向量)时,这会创建一个字符串变量。另一个想法是添加%scan(假设这是在宏内):

这似乎效率低下并且需要大量代码。它还要求程序员记住哪个var_&i对应于每个未​​来的目的。有没有更简单/更清洁的方法来做到这一点?

**如果这是足够的背景/示例,请在评论中告诉我。如果需要,我很乐意更完整地描述我为什么要做我正在尝试的事情。

0 投票
1 回答
466 浏览

sas - 使用 scan(&varlist) 的错误 + 宏变量的比较

作为这个问题的后续,我现有的答案似乎是最好的: Extracting sub-data from a SAS dataset & apply to a different dataset

给定一个 dataset ,我目前有一组包含数字数据dsn_in的宏变量。我还有一个包含变量列表的宏变量。这两组宏是相关的,例如与等相关联。我正在尝试将每个变量中的数据值与相关的比较值进行比较- 。我想将更新后的数据输出到. 这是我到目前为止所拥有的:max_1max_Nvarlistmax_1scan(&varlist, 1)dsn_invarlistmax_1max_Ndsn_out

但是,我收到以下错误,我不明白。options mprint;显示。当 SAS 是一个 SAS 函数时,它似乎同时被解释scan为一个数组和一个变量。

您能提供的任何帮助将不胜感激。

0 投票
1 回答
3918 浏览

sas - 如何使用 SAS 中的计算从现有宏变量创建新的宏变量?

我想从其他已经存在的宏变量中创建一个新的宏变量。

我尝试了 , 的多种变体,call symput但无济于事...%evalinput

我想d评估为 3 / 30 = .10。



非常感谢...

0 投票
2 回答
8871 浏览

sas - 您如何读取多个特定数据集并附加到一个大数据集?

您如何读取多个特定数据集并附加到一个大数据集?

例如,我在一个库中拥有 100 个数据集,但我只想附加具有 _du1、_du2 的数据集

格式和列名相同

我的刺没用:

0 投票
3 回答
465 浏览

sas - 在最初打开 SAS 时定义宏

我遇到了一个非常好的宏,我想用作热键:

(来源:https ://stackoverflow.com/a/3254004/110797 )

问题是我每次启动 SAS 时都必须重新运行宏声明!上面的代码并没有永久设置键绑定,但我想出了那部分(只需进入键 (F9) 并手动将 F12 设置为 %closevts,然后在关闭键窗口时将其保存为永久)。 我怎样才能永久设置宏定义呢?

我查看了使用 sas 配置文件,但我无法弄清楚。另外,我的系统已被锁定,因此如果有些解决方案不起作用,我们将不胜感激。

0 投票
1 回答
4546 浏览

sql-server - 如何在 MS SQL Server 的 WHERE 子句中的 IN 语句上将宏变量传递给 PROC SQL

我在 MS SQL Server 中有一个表,如下所示:

并在 SAS 中定义为

我有一个 SAS 数据集,它的记录格式与 MSSQLDB(ID 和代码变量)相同,但它只是整个数据库的一个子集。

我想做以下事情:

问题是这会对 &CodeInVar 宏变量中的值产生语法错误。

知道如何在 IN 语句中将宏变量值传递给 SQL Server 吗?

0 投票
1 回答
57 浏览

database - 在 SAS 中的 2 个 ID 属性中查找最高级别的变量

我的输入数据集如下所示:

我需要构建一个数据集,其中仅包含那些不再有父级的 DRUGS(以及此 DRUGS 的所有属性)和一个包含最低级别 DRUG_CD 的额外列(CHD_DRUG_CD)。