SAS informat дата и время

JavaScript не поддерживает многопоточность, потому что интерпретатор JavaScript в браузере является единственным потоком (AFAIK). Даже Google Chrome не позволит единственной сети page’s JavaScript, выполненный одновременно, потому что это вызвало бы крупные проблемы параллелизма в существующих веб-страницах. Весь Chrome делает разделить несколько компонентов (различные вкладки, плагины, и так далее) в отдельные процессы, но я can’t воображаю единственную страницу, имеющую больше чем один поток JavaScript.

можно однако использовать, как был предложен, setTimeout для разрешения своего рода планирования и “fake” параллелизма. Это заставляет браузер восстанавливать управление потоком рендеринга и запускать код JavaScript, предоставленный setTimeout после данного количества миллисекунд. Это очень полезно, если Вы хотите позволить область просмотра (что Вы видите) обновляться при выполнении операций на нем. Просто цикличное выполнение через, например, координаты и обновление элемента соответственно просто позволят Вам видеть запуск и конечные положения и ничто промежуточное.

Мы пользуемся библиотекой абстракции в JavaScript, который позволяет нам создавать процессы и потоки, которыми все управляет тот же интерпретатор JavaScript. Это позволяет нам выполнять действия следующим образом:

  • Процесс A, Поток 1
  • Процесс A, Поток 2
  • Процесс B, Поток 1
  • Процесс A, Поток 3
  • Процесс A, Поток 4
  • Процесс B, Поток 2
  • Процесс Паузы
  • Процесс B, Поток 3
  • Процесс B, Поток 4
  • Процесс B, Поток 5
  • Запускает Процесс
  • Процесс A, Поток 5

, Это позволяет некоторую форму планирования и фальсифицирует параллелизм, запуск и остановку потоков, и так далее, но это не будет истинная многопоточность. Я don’t думают, что это будет когда-либо реализовываться на самом языке, начиная с истинной многопоточности, только полезен, если браузер может выполнить единственную многопоточную страницу (или даже больше чем одно ядро), и трудности, там путь, больше, чем дополнительные возможности.

Для будущего JavaScript, проверьте это: https://developer.mozilla.org/presentations/xtech2006/javascript /

7
задан Allan Bowe 7 September 2009 в 14:21
поделиться

5 ответов

Я не думаю, что конкретная информация встроена, но относительно легко накатить свою собственную. Ниже приведен пример создания настраиваемой информации datetime (для этого требуется набор данных cntlin) и настраиваемого формата (с использованием оператора изображения), который считывается в вашем конкретном datetime, а затем форматирует его обратно, чтобы он выглядел так же, как ввод. Я упростил его, предположив, что часть времени всегда была полночь (00:00), но ее можно легко расширить, если вам также нужно отслеживать части времени (просто измените число 86400 на 3600, чтобы получать каждый час, и 60 за каждую минуту). Это поможет увидеть, что происходит, если вы откроете набор данных work.infmt, чтобы увидеть, как он выглядит.

/* Create a custom datetime format as Month/Day/Year<space>Hours:Minutes*/
proc format;
  picture mydt other='%0m/%0d/%0Y %0H:%0M' (datatype=datetime);
run;

/* Create a custom informat using the format above */
data infmt ;
retain fmtname "dtwithspace" type "I" ;
   do label = "1jan1960:00:00"dt to
              "2jan2059:00:00"dt by 86400 ; 
      start = trim(left(put(label,mydt.)));
      output ;
   end ;
run ;
proc format cntlin = infmt ;
run ;


/* Now apply the informat and format to the data */
data _null_;
input from_dt $ 1-20;
format from_dt2 mydt.;
from_dt2=input(from_dt, dtwithspace.);
put from_dt2=;
cards;
01/01/1960 00:00
01/02/1999 00:00
;
run;

Это дало следующий результат:

278  data _null_;
279  input from_dt $ 1-20;
280  format from_dt2 mydt.;
281  from_dt2=input(from_dt, dtwithspace.);
282  put from_dt2=;
283  cards;

from_dt2=01/01/1960 00:00
from_dt2=01/02/1999 00:00
8
ответ дан 6 December 2019 в 08:44
поделиться

SAS может не поддерживать конкретный формат даты и времени, в котором находятся ваши данные. Вы можете либо попытаться преобразовать входящие данные в формат frendlier, либо проанализировать дату и время с помощью substr , Функции DHMS и MDY :

data test;
    format dtstr $16. dt datetime22.4;
    dtstr='01/01/1960 00:00';
    day=substr(dtstr,1,2);
    month=substr(dtstr,4,2);
    year=substr(dtstr,7,4);
    hour=substr(dtstr,11,2);
    minute=substr(dtstr,15,2);
    dt=DHMS(MDY(1*month,1*day,1*year),1*hour,1*minute,0);
    output;
run;

Или, в качестве альтернативы, вы можете преобразовать строку datetime в формат datetimew.d и ввести отформатированную строку:

data test;
    format dtstr $16. dstr $8. tstr $5. indtstr $14. dt datetime22.4;
    dtstr='01/01/1960 00:00';
    dstr=put(input(substr(dtstr,1,10),mmddyy10.),date8.);
    tstr=substr(dtstr,12);
    indtstr=dstr!!':'!!tstr;
    dt=input(indtstr,datetime14.0);
    output;
run;

Преобразование можно сжать в один, но сложный оператор , поэтому создание макроса для этого может быть хорошим решением.

5
ответ дан 6 December 2019 в 08:44
поделиться

Эта запись из базы знаний SAS включает код для синтаксического анализа и форматирования даты и времени. Похоже, у SAS отличная онлайн-справочная система.

Третье сообщение в этого обмена в группах Google также может быть полезным. В нем говорится о вводе даты и времени и предоставляется код.

Ваш вопрос так сложно расшифровать, а я так мало знаю о SAS, это почти все, что я могу предложить. Надеюсь, это поможет.

0
ответ дан 6 December 2019 в 08:44
поделиться

Семейство данных anydt * обычно работает.

data _null_;
  from_dt = input("01/01/1960 00:00", anydtdtm.);
  put from_dt= :datetime20.;
run;
/* on log
from_dt=01JAN1960:00:00:00
*/
8
ответ дан 6 December 2019 в 08:44
поделиться

По списку здесь , Я не думаю, что он есть.

Возможно, вы могли бы создать свой собственный с форматом proc , но я думаю, что это будет очень сложно. Предложение Вилле Коскинена, вероятно, будет вашим лучшим выбором.

0
ответ дан 6 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: