【发布时间】:2015-07-02 20:59:42
【问题描述】:
我在一家公司的销售部门工作,每个月我们都有一些销售收入为负数的产品。我的工作是提取那些产品 ID 来分析它们。我使用使用 SAS 语言的 WPS。所以我首先需要使用 proc sql 提取产品 ID(例如 2 月 9680 产品)。 在第二步中,我在 proc sql 中使用这些 ID 来获取有关这些产品的额外信息,例如它们的价格、日期等......
问题在于,在 WPS 中,只能读取 3000 个观察值,而不是在 proc sql 语句中提取的数据。 所以我需要做一个循环来计算一个月内的 ID 数量,然后提取 3000 个第一个 ID 的信息,它会附加以下 ID,并一次又一次地附加,直到我得到所有 9680 个 ID 以及它们附带的额外信息.
我的代码是:
PROC SQL;
CREATE TABLE Febsales.NB_IDs AS
SELECT /* COUNT of Number of products */
(COUNT(t1.ID)) AS NB_ID
FROM ID_prod t1
WHERE t1.ID_sales_revenue < 0;
QUIT;
其他的我都不知道怎么弄了。
我的想法是告诉 sas:
do i=1 to='&NB_ID' by=3000
然后用以下代码提取:
%TeradataOpen (Lib= Revenue AF Socle ODS,dataout=af0215_liste1)
SELECT
OD_prod.pd_ID,
OD_prod.pd_line ,
OD_prod.pd_serie ,
OD_prod.pd_manu,
OD_prod.pd_cust_ID,
OD_prod.pd_price,
OD_prod.pd_amount,
OD_prod.pd_cost,
OD_prod.pd_buyer,
OD_prod.pd_mkt_share,
OD_prod.pd_gross,
OD_prod.pd_marketor,
sum(OD_prod.pd_mkt_share) as tot_share,
sum(OD_prod.pd_GROss) as tot_rev,
OD_prod.DAT_prod as prod,
FROM
OD_prod,
OD_ manufact
WHERE .....
然后是:
proc append
【问题讨论】:
-
是只在初始连接外部数据库时限制,还是在任何SQL语句中总是限制在3000条记录?你是如何阅读它们的——在上面你既没有使用 CONNECT TO 也没有使用完全限定的 libname/table 名称,所以不清楚 -
%TeradataOpen是在执行connect to teradata吗?你上面列出的 SQL 真的是直通语法吗? -
另外 - 在 WPS 中是否可以使用数据步骤来读取数据(就像在 SAS 中一样)?
-
3000 条记录对我来说似乎是人为的限制。这个限制在哪里配置?你不能改变它吗?
标签: sql sas sas-macro proc-sql