JavaScript не поддерживает многопоточность, потому что интерпретатор JavaScript в браузере является единственным потоком (AFAIK). Даже Google Chrome не позволит единственной сети page’s JavaScript, выполненный одновременно, потому что это вызвало бы крупные проблемы параллелизма в существующих веб-страницах. Весь Chrome делает разделить несколько компонентов (различные вкладки, плагины, и так далее) в отдельные процессы, но я can’t воображаю единственную страницу, имеющую больше чем один поток JavaScript.
можно однако использовать, как был предложен, setTimeout
для разрешения своего рода планирования и “fake” параллелизма. Это заставляет браузер восстанавливать управление потоком рендеринга и запускать код JavaScript, предоставленный setTimeout
после данного количества миллисекунд. Это очень полезно, если Вы хотите позволить область просмотра (что Вы видите) обновляться при выполнении операций на нем. Просто цикличное выполнение через, например, координаты и обновление элемента соответственно просто позволят Вам видеть запуск и конечные положения и ничто промежуточное.
Мы пользуемся библиотекой абстракции в JavaScript, который позволяет нам создавать процессы и потоки, которыми все управляет тот же интерпретатор JavaScript. Это позволяет нам выполнять действия следующим образом:
, Это позволяет некоторую форму планирования и фальсифицирует параллелизм, запуск и остановку потоков, и так далее, но это не будет истинная многопоточность. Я don’t думают, что это будет когда-либо реализовываться на самом языке, начиная с истинной многопоточности, только полезен, если браузер может выполнить единственную многопоточную страницу (или даже больше чем одно ядро), и трудности, там путь, больше, чем дополнительные возможности.
Для будущего JavaScript, проверьте это: https://developer.mozilla.org/presentations/xtech2006/javascript /
Я не думаю, что конкретная информация встроена, но относительно легко накатить свою собственную. Ниже приведен пример создания настраиваемой информации 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
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;
Преобразование можно сжать в один, но сложный оператор , поэтому создание макроса для этого может быть хорошим решением.
Эта запись из базы знаний SAS включает код для синтаксического анализа и форматирования даты и времени. Похоже, у SAS отличная онлайн-справочная система.
Третье сообщение в этого обмена в группах Google также может быть полезным. В нем говорится о вводе даты и времени и предоставляется код.
Ваш вопрос так сложно расшифровать, а я так мало знаю о SAS, это почти все, что я могу предложить. Надеюсь, это поможет.
Семейство данных 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
*/
По списку здесь , Я не думаю, что он есть.
Возможно, вы могли бы создать свой собственный с форматом proc
, но я думаю, что это будет очень сложно. Предложение Вилле Коскинена, вероятно, будет вашим лучшим выбором.