问题标签 [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.
import - SAS proc 导入缺少前导零
我正在尝试使用 proc import ( SAS ) 将数字从 csv 文件导入 sas 数据集,但导入后我所有的前导零都消失了。
例如,
'0123456' 导入后我只会得到 '123456'
sql - 子查询在连接两个子集时产生比预期更多的结果
在两个表上执行左外连接语句后,我可能会收到更多的 ID。
背景:我已经从较大的数据集中缩小了两个表。以下是我在从较大的数据集中进行选择后用来获取可能的 ID 的查询。我正在尝试根据 personID 将两个数据集连接在一起。我正在执行 LEFT JOIN,因为我想保留 smallset 表中的所有数据,同时将其与缩小数据表中的数据配对。
在对较大数据集的子集运行此查询时,我收到以下 ID:
现在,在运行第二个查询时,我收到以下信息:
我收到以下查询:
到目前为止,一切都很好。一切都如预期的那样。但是,当我尝试加入这两个子集时运行下一个子查询时,会得到意想不到的结果。
此结果中包含的数据未包含在任一先前查询中。特别是 ID 41485
、41489
等41496
。我不知道为什么会出现这些 ID,因为当我将查询分解为单独的查询时,我得到了我需要的 ID。
indexing - 为什么 SAS 不使用我的索引?
我有一个按字段“A”排序的大型 SAS 数据集。我想做一个引用字段“A”和“B”的查询。为了提高性能,我在“B”上创建了一个索引。这会导致一条无用的消息:
当然,对 B 进行排序会有所帮助。但这不是重点。索引适用于您已经在其他字段上排序的情况。
在类似的查询中,SAS 给出以下消息:
关于让 SAS 使用我的索引的任何提示?在一种情况下,查询需要 2 小时才能运行,因为 SAS 不使用索引。
sas - 限制 PROC SQL 中的结果
我正在尝试使用 PROC SQL 来查询具有数亿条记录的 DB2 表。在开发阶段,我想对这些记录的任意小子集(比如 1000)运行我的查询。我尝试使用 INOBS 来限制观察结果,但我相信这个参数只是限制了 SAS 正在处理的记录数。我希望 SAS 只从数据库中获取任意数量的记录(然后处理所有记录)。
如果我自己编写 SQL 查询,我会简单地使用SELECT * FROM x FETCH FIRST 1000 ROWS ONLY ...
(相当于SELECT TOP 1000 * FROM x
SQL Server 中的)。但是 PROC SQL 似乎没有这样的选项。获取记录需要很长时间。
问题:如何指示 SAS 任意限制从数据库返回的记录数。
我读过 PROC SQL 使用 ANSI SQL,它没有任何关于行限制关键字的规范。也许 SAS 不想努力将其 SQL 语法转换为特定于供应商的关键字?没有解决办法吗?
sql - SAS:选择多列值的频率
我有这个问题,但是在 SAS 中。要使用此问题中提供的示例,我有 5 列名称(name_1、name_2 等),并希望输出一个列表,其中名称按频率降序排列:
我回答了上面提到的问题,并用“proc sql;”包围了它。和“退出;”:
但我得到:
我正在使用 SAS 9.2。
想法?谢谢您的帮助!
sas - 为什么MAX函数在proc sql中去掉SAS变量格式?
考虑以下:
对我来说似乎不一致。为什么 proc sql 在这种情况下保留格式?这种行为是否记录在案?
sql - SAS proc sql连接和连接
我正在尝试在 SAS 结构中为金融系统数据构建数据模型。这个想法是将ID作为字符表达式保存在表中,然后从另一个表中为它们proc sql
构建一个 -应该以表达式开头。应该是这样的:INNER JOIN
LIKE
IDs
'ID%'
proc sql
不幸的是,它应该是这样的:... LIKE 'X.ID%'
有没有办法在 SAS 代码中构建这样的表达式?
sql - SAS Proc SQL 获取与特定日期最近的记录
我有2个表如下:
表1、用户列表表:
表 2 描述了用户升级历史:
从这 2 个表中,我需要生成一个与表 1 类似的结果表,但添加一个列,该列对过去 3 个月或特定日期 3 个月以上的 A 类型用户进行分类。例如,结果将是:
一般的想法是:
- 我需要将表 1 中的月份列和年份列转换为日期格式,如 3/2010
- 减去与上述日期(2/2010)最接近的促销日期的新转换值,以获得用户被提升的天数
- 比较 90 天来对他的晋升持续时间进行分类
我目前遇到了两个问题。
我不知道将月列和年列转换为月/年日期格式的最佳方法。
假设我已经从 table1 转换了月/年列,我使用 Max 函数从 table2 获取最近的日期。据我所知,max函数对性能不好,那么除了使用max之外,还有其他解决方案吗?在mysql中,使用Limit 1很容易解决,但是SAS proc-sql不支持Limit。proc-sql中是否有任何等效的限制?以下是我目前正在考虑的代码。
如您所见,我需要将 table1 与其他表左连接,因此我使用子查询,这也是一个糟糕的性能,但我不知道是否有其他方法。帮助和建议表示赞赏。
sql - SQLselect count with case/when
我有下表:
我想创建一个新表来计算每种类型的行数。为每种类型计数创建每个表很容易,但我想让它的外观和性能更好,所以可以在一个查询中做到这一点吗?我想出了一个像下面这样的查询,但它不起作用。该错误表示“WHEN 子句 2 的结果与前面的结果的数据类型不同”。帮助表示赞赏,并提前感谢。
sql - 没有按 SELECT 中的所有非聚合列分组的 HAVING 子句
在没有按所有非聚合列分组的 HAVING 子句中,SELECT
我经常遇到具有 id 列和月份列以及许多其他指标的表。我根据其他列清除了某些行。我只想识别拥有所有 12 个月数据的 ID,所以我执行以下操作:
它似乎对我有用,但我想知道这种方法是否有任何危险。我知道我可以加入只有 id 和 id 计数的聚合子查询,但是这种方法更容易向非 sql 用户解释。
一般来说,您可以使用HAVING
仅在语句中包含几个列GROUP BY
且在语句中没有聚合函数的子句SELECT
吗?