【问题标题】:Column Sorting with PROC Transpose in SAS在 SAS 中使用 PROC 转置进行列排序
【发布时间】:2017-07-07 20:25:38
【问题描述】:

我使用下面提到的代码在 proc 转置后动态排序列。我已经为这个解决方案提供了很多解决方案。但是现在如果我运行,我会收到错误

data work.AB ;
input name $ class $ dt $ gpa $;
datalines;
JOHN 1 201607 C-
JOHN 1 201608 C+
JOHN 1 201702 B-
JOHN 2 201608 A
NICK 1 201608 A
NICK 1 201707 A
MIKE 2 201608 B
MIKE 2 201607 B
MIKE 2 201707 B+
MIKE 2 201702 B
BOB 3 201702 D
BOB 3 201607 C
BOB 3 201707 C
;
proc sort data=work.AB;
by NAME ClASS dt;
run;

PROC TRANSPOSE DATA = AB OUT = ABC(drop=_name_) ;
BY nAME cLASS; 
VAR GPA;
ID dt; 
RUN ;

proc sql ;
create table test as 
select name into : list separated by ' '
from dictionary.columns
where libname='WORK' and memname='ABC'
order by input(substr(name,anydigit(name)),best32.)
;
quit;

%put &list;

data want;
retain &list;
set ABC;
run;

我得到的错误是

22 GOPTIONS ACCESSIBLE;
WARNING: Apparent symbolic reference LIST not resolved.
23 %put &list;
&list

24 data want;
25 retain &list;
_
22
200
WARNING: Apparent symbolic reference LIST not resolved.

ERROR 22-322: Syntax error, expecting one of the following: a name, ;, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_.
ERROR 200-322: The symbol is not recognized and will be ignored.

26 set ABC;
27 run;

请推荐。

【问题讨论】:

  • 您需要提供更多信息(大概是程序第一部分的日志)。无论出于何种原因,SQL SELECT INTO 位都不起作用,但我们不知道为什么。
  • 我刚刚提到了我得到的错误日志。休息一切对我来说都很好。我无法找到上述错误的解决方案。也许你可以使用 proc sql noprint; select name into : list by ' ' from dictionary.columns where libname=WORK' and memname='ABC' order by input(substr(name,anydigit(name)),best32.) quit;

标签: sas


【解决方案1】:

您不能将同一 SELECT 语句中的值同时放入数据集和宏变量中。从您的 SQL 代码中删除 create table test as。

您可能还想通过将查询更改为来抑制某些警告:

proc sql noprint ;
select case when (not anydigit(name)) then -1
            else input(substr(name,anydigit(name)),?32.)
       end as order
     , name
  into :list
     , :list separated by ' '
from dictionary.columns
where libname='WORK' and memname='ABC'
order by 1
;
quit;

%put &list;

【讨论】:

  • 嗨,汤姆,我也试过这样做。但是我遇到了与前面查询中提到的相同的错误。 68个数据要; 69 保留 &list;注意:由宏变量“LIST”生成的行。 69 类名 201607 201608 201702 201707 ______ 22 200 错误 22-322:语法错误,需要以下之一:名称、;、ALL、CHARACTER、字符、数字。错误 200-322:符号无法识别,将被忽略。我无法解决
  • 要么你的变量名没有遵循正常的约定,所以你需要在查询中指定nliteral(name)。否则,您没有正确指定 INTO 子句,并且您最终将 ORDER 的值放入宏变量 LIST 而不是 NAME 的值..
猜你喜欢
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 2022-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多