【问题标题】:SAS format in data step数据步中的 SAS 格式
【发布时间】:2023-03-10 19:28:01
【问题描述】:

我有一个包含 30 多列的 WORK 数据集,但其中只有 2 列是日期字段。 (开始日期和结束日期)。我希望永久数据集中的日期格式是最新的。而不是在 yymmdd10 中。这是工作数据集中的当前格式。当我使用下面的代码时,两个日期字段占据了前两个位置。我不想重新排序位置,同时也不想提及所有 30 多列的格式。如果有什么办法,有人可以帮我吗?

data DLR.DEALER; 
set  work.dealer_invoices; * this dataset contains more than 30 columns; 
format start_dt end_dt date.; 
run; 

我在我们的网站上找不到任何解决方案。任何帮助都非常感谢,而不仅仅是要求我在格式声明中提及所有列:) 提前致谢。

【问题讨论】:

  • 我认为format 语句不会像set 语句之后那样对变量排序产生任何影响。我无法用给定的信息复制您的问题。
  • 相同,无法复制您的问题。如果你能复制它,我建议你开一张技术支持的票。
  • @DWal 真是令人惊讶。我想,那我应该提出一张罚单。谢谢
  • 您检查了日志以确保它运行?并且没有打开数据集(有效地锁定它并防止更改)?您是否尝试重新启动 SAS 会话?我想我必须看到这个错误被复制才能相信它。
  • 我不明白这个。您提到您不希望start_dtend_dt 成为DLR.DEALER 数据集中的第一列,对吗?然后你相​​信format 行从work.dealer_invoices 中的原始顺序更改了顺序,但同时你说proc contents data=work.dealer_invoices; run; 的结果将start_dtend_dt 分别列为第一和第二Alphabetic List of Variables and Attributes。这不意味着他们从一开始就在这个数据集中是第一位的吗?因此,顺序没有变化。

标签: sas


【解决方案1】:

当然,考虑到它的位置,格式声明不应该对排序产生任何影响。

一种解决方法是使用PROC DATASETS 来更改格式,而不是在数据步骤中。

您还可以相当轻松地“提及所有列”。

proc sql;
  select name into :namelist separated by ' '
  from dictionary.columns
  where libname='WORK' and memname='DEALER_INVOICES'
  order by varnum;
quit;

然后

data DLR.DEALER;
  retain &namelist;
  set work.dealer_invoices;
  format...;
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多