问题标签 [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.
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?
sas - SAS - 从宏变量创建变量
我有一个 SAS 数据集,它有 20 个字符变量,所有这些都是名称(例如 Adam、Bob、Cathy 等)
我想要一个动态代码来创建名为 Adam_ref、Bob_ref 等的变量。即使存在具有不同名称的不同数据集(即不想手动定义每个变量),它也可以工作。
到目前为止,我的方法是使用 proc 内容来获取所有变量名称,然后使用宏来创建宏变量 Adam_ref、Bob_ref 等。
如何从这里在数据集中创建实际变量?我需要不同的方法吗?
sas - SAS 9.3 中的“For in”循环等效项
我正在寻找SAS 9.3 宏语言中for in循环(如在Python或 R 中)的等价物。DO 循环似乎是解决方案,但并没有完全按照我的意愿工作。我建立了一种在数据步骤中使用DO 循环执行此操作的方法,但它不适用于宏语言。例如,在数据步骤中,此代码正在运行:
然后按预期出现日志提示:
当我尝试对宏中的%DO循环执行相同操作时,出现错误。
日志提示这些消息:
我是 SAS 和 stackoverflow 的新手,所以我希望我的问题不会太愚蠢。在 Python 和 R 中做到这一点非常简单,那么它必须有一种简单的方法在 SAS 中做到这一点。
感谢您的帮助 - J. Muller
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
对应于每个未来的目的。有没有更简单/更清洁的方法来做到这一点?
**如果这是足够的背景/示例,请在评论中告诉我。如果需要,我很乐意更完整地描述我为什么要做我正在尝试的事情。
sas - 使用 scan(&varlist) 的错误 + 宏变量的比较
作为这个问题的后续,我现有的答案似乎是最好的: Extracting sub-data from a SAS dataset & apply to a different dataset
给定一个 dataset ,我目前有一组包含数字数据dsn_in
的宏变量。我还有一个包含变量列表的宏变量。这两组宏是相关的,例如与等相关联。我正在尝试将每个变量中的数据值与相关的比较值进行比较- 。我想将更新后的数据输出到. 这是我到目前为止所拥有的:max_1
max_N
varlist
max_1
scan(&varlist, 1)
dsn_in
varlist
max_1
max_N
dsn_out
但是,我收到以下错误,我不明白。options mprint;
显示。当 SAS 是一个 SAS 函数时,它似乎同时被解释scan
为一个数组和一个变量。
您能提供的任何帮助将不胜感激。
sas - 如何使用 SAS 中的计算从现有宏变量创建新的宏变量?
我想从其他已经存在的宏变量中创建一个新的宏变量。
我尝试了 , 的多种变体,call symput
但无济于事...%eval
input
我想d
评估为 3 / 30 = .10。
非常感谢...
sas - 您如何读取多个特定数据集并附加到一个大数据集?
您如何读取多个特定数据集并附加到一个大数据集?
例如,我在一个库中拥有 100 个数据集,但我只想附加具有 _du1、_du2 的数据集
格式和列名相同
我的刺没用:
sas - 在最初打开 SAS 时定义宏
我遇到了一个非常好的宏,我想用作热键:
(来源:https ://stackoverflow.com/a/3254004/110797 )
问题是我每次启动 SAS 时都必须重新运行宏声明!上面的代码并没有永久设置键绑定,但我想出了那部分(只需进入键 (F9) 并手动将 F12 设置为 %closevts,然后在关闭键窗口时将其保存为永久)。 我怎样才能永久设置宏定义呢?
我查看了使用 sas 配置文件,但我无法弄清楚。另外,我的系统已被锁定,因此如果有些解决方案不起作用,我们将不胜感激。
sql-server - 如何在 MS SQL Server 的 WHERE 子句中的 IN 语句上将宏变量传递给 PROC SQL
我在 MS SQL Server 中有一个表,如下所示:
并在 SAS 中定义为
我有一个 SAS 数据集,它的记录格式与 MSSQLDB(ID 和代码变量)相同,但它只是整个数据库的一个子集。
我想做以下事情:
问题是这会对 &CodeInVar 宏变量中的值产生语法错误。
知道如何在 IN 语句中将宏变量值传递给 SQL Server 吗?
database - 在 SAS 中的 2 个 ID 属性中查找最高级别的变量
我的输入数据集如下所示:
我需要构建一个数据集,其中仅包含那些不再有父级的 DRUGS(以及此 DRUGS 的所有属性)和一个包含最低级别 DRUG_CD 的额外列(CHD_DRUG_CD)。